Почему скрытие дочерней формы также скрывает родительскую форму? - PullRequest
0 голосов
/ 16 августа 2010

У меня есть три формы: A, B и C.

После нажатия кнопки A отображает B. Аналогично, B отображает C. Оба используют метод ShowDialog ().

Однако, когда я использую метод Hide () (внутри события нажатия кнопки) в форме C, чтобы закрыть его, форма B также закрывается.

Почему это будет?Насколько я вижу, этого делать не следует.Я, конечно, не написал никакого кода, чтобы сказать это, чтобы сделать это.

Вот код:

' from Form "A" (MainForm)
Private Sub OrdersDataGridView_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles OrdersDataGridView.CellDoubleClick
    ShowViewOrderForm(sender)
End Sub

Private Sub ShowViewOrderForm(ByVal CurrentDGV As DataGridView)
    If Not CurrentDGV Is Nothing Then
        Dim f As New ViewOrderForm
        f.SetOrderNo(CurrentDGV.CurrentRow().Cells().Item(0).Value)
        f.SetDeliveryServiceType(CurrentDGV.CurrentRow().Cells().Item(5).Value)

        f.ShowDialog()
    End If
End Sub

' from Form "B" (ViewOrderForm)
Private Sub IssueOrderButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IssueOrderButton.Click
    Dim f As New IssueForm
    f.SetOrderNo(ThisOrderNo)
    f.ShowDialog()
End Sub

' from Form "C" (IssueForm)
Private Sub CloseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloseButton.Click
    Me.Hide()
End Sub

ОБНОВЛЕНИЕ : Я идиот.DialogResult было установлено на Cancel на кнопке, так как я скопировал + вставил ее с существующей кнопки Закрыть и не понял, что свойство установлено.В любом случае, спасибо за ваши предложения!

Ответы [ 3 ]

1 голос
/ 16 августа 2010

Мне не удалось воспроизвести поведение, которое вы видите, с помощью предоставленного вами кода.Существуют ли другие параметры в любой из форм (возможно, заданные в конструкторе), которые могут быть причиной этого?

Кроме того, функция Hide() фактически не закрывает окно.Это эквивалентно изменению свойства Visible на False.Читайте о Скрыть здесь .

Если вы действительно хотите закрыть окно, вам следует позвонить Me.Close().

0 голосов
/ 16 августа 2010

Единственное, о чем я могу думать, это то, что у вас есть обработчик событий в форме B, который подключен к событию нажатия кнопки формы C ... хотя, как бы вы сделали это, не осознавая, я не могу себе представить.

Попробуйте установить родителя формы C при вызове диалогового окна показа в событии формы IssueOrderButton_Click, выполнив

f.ShowDialog(Me)

Я согласен, что вы, вероятно, хотите использовать Me.Close() вместо Me.Hide()

0 голосов
/ 16 августа 2010

Попробуйте установить свойство mdiParent дочерней формы:

    If IsNothing(_cases) Then
        _cases = New frmGrid        
        _cases.MdiParent = Me
        _cases.init(_main, 0, "", "")
        _cases.WindowState = FormWindowState.Maximized
    End If
    _cases.Visible = Me.mnuViewCaseFiles.Checked
...