2017-08-03 2 views
0
angezeigte

Ich habe eine MDI Child Form (frmReview), die ich auf meinem maximierte geordnete Formular mit dem folgenden Code zu zielen:MDI Child Form nicht

Public Sub frmTransport_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown 
    'keyboard shortcuts 
    If e.KeyCode = Keys.F1 Then LaunchManual() 
    If e.Control Then 
     If e.KeyValue = Keys.R Then 
      Me.WindowState = FormWindowState.Maximized 
      Dim review As New frmReview 
      review.MdiParent = Me 
      review.Location = New Point(1175, 0) 
      review.BringToFront() 
      review.Show() 
     End If 
     ... 
     ... 
     End Sub 

enter image description here

Punkt (1175, 0) ist die obere rechte Ecke, wo das TabControl den gelben mdi Container trifft. Das Elternformular hat seine IsMdiContainer-Eigenschaft auf True gesetzt und Load-Ereignis von FRMReview wird ausgelöst, wenn ich diesen Code ausführen, aber ich sehe das untergeordnete Formular nicht:

In einem anderen Programm habe ich, um denselben Prozess MDI anzuzeigen Child Forms und es funktioniert gut. Irgendwelche Vorschläge, warum das passiert?

Vielen Dank im Voraus!

+0

Sie wissen, dass 'Location' an der linken oberen Ecke einer Kontrolle entspricht, und Sie setzen, dass nach rechts oben Ecke des Elternteils? Versuchen Sie (588, 0), es sollte in der Mitte sein. Sie müssen nur die Mathematik für den richtigen Ort zu tun – djv

+0

Mein Fehler - setzen Sie es auf (588, 0), immer noch nicht funktioniert –

Antwort

1

Wenn Sie das Formular in der rechten oberen Ecke angezeigt werden soll, verwenden Sie diese

Dim mdiClient = Me.Controls.OfType(Of MdiClient).FirstOrDefault() 
Me.WindowState = FormWindowState.Maximized 
Dim review As New frmReview 
review.MdiParent = Me 
review.BringToFront() 
review.Show() 
' order of Show() call changed so review has a size 
review.Location = New Point(mdiClient.Size.Width - review.Width, 0) 
+0

Ich habe nicht explizit versucht, das Formular in der oberen rechten Ecke zu zeigen, aber dieser Code zeigt meine bilden. Danke. Können Sie mir erklären, warum mein Code nicht funktioniert hat? –

+0

Nun hat die Reihenfolge von Show() etwas Einfluss. Nach dem Aufruf von Show wird es eine anfängliche Größe und Position haben. Bevor es nicht geht. Deshalb benötige ich diese Reihenfolge für meine Mathe, die seine Breite miteinbezieht ... Nicht sicher, warum Ihr Formular nicht angezeigt wurde, als es in Ihrer ursprünglichen Reihenfolge angerufen wurde. Möglicherweise war alles, was bereits auf der MDI-Form ist, irgendwie noch oben. – djv

+1

Alles, was ich in meinem ursprünglichen Code tun musste, war, Show() vor Location = zu verschieben. Vielen Dank! –

Verwandte Themen