Дочерняя форма MDI не отображается

У меня есть дочерняя форма MDI (frmReview), которую я хочу показать в развернутой родительской форме со следующим кодом:

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

введите описание изображения здесь

Точка (1175, 0) - это верхний правый угол, где TabControl встречается с желтым контейнером mdi. В родительской форме для свойства isMdiContainer установлено значение True, и событие Load для frmReview срабатывает, когда я запускаю этот код, но я не вижу дочернюю форму:

В другой имеющейся у меня программе я использую тот же процесс для отображения дочерних форм MDI, и он отлично работает. Есть предложения о том, почему это происходит?

Заранее спасибо!


person Tyler Braun    schedule 03.08.2017    source источник
comment
Вы знаете, что Location соответствует верхнему левому углу элемента управления, и вы устанавливаете его в верхний правый угол родительского элемента? Попробуйте (588, 0), он должен быть посередине. Вам просто нужно посчитать правильное местоположение   -  person djv    schedule 03.08.2017
comment
Моя ошибка - установил (588, 0), все еще не работает   -  person Tyler Braun    schedule 03.08.2017


Ответы (1)


Если вы хотите, чтобы форма отображалась в правом верхнем углу, используйте это

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)
person djv    schedule 03.08.2017
comment
Я не пытался явно показать форму в правом верхнем углу, но этот код показывает мою форму. Спасибо. Не могли бы вы объяснить, почему мой код не работал? - person Tyler Braun; 03.08.2017
comment
Ну, порядок Show () имеет некоторое влияние. После вызова Show у него будет исходный размер и позиция. Раньше этого не было. Вот почему мне нужен этот порядок для моих математических расчетов, связанных с его шириной ... Не уверен, почему ваша форма не отображалась при вызове в исходном порядке. Возможно, все, что уже было в форме MDI, каким-то образом все еще было наверху. - person djv; 03.08.2017
comment
Все, что мне нужно было сделать в моем исходном коде, это переместить Show () до Location =. Спасибо! - person Tyler Braun; 03.08.2017
comment
Хорошо .. Я мог бы сэкономить много времени :) - person djv; 03.08.2017