2010-08-16 118 views
0

我有三種形式:A,B和C.爲什麼隱藏子窗體也隱藏父窗體?

當一個按鈕被點擊時,A顯示B.同樣,B顯示C.兩個都使用ShowDialog()方法。

然而,當我在窗體C上使用Hide()方法(在Button Click事件中)關閉它時,窗體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,因爲我將其從現有的「關閉」按鈕中複製並粘貼,並未意識到該屬性已設置。無論如何,感謝您的建議!

+0

也許,一些代碼?試過了,一切都很好。 – 26071986 2010-08-16 12:14:04

+0

謝謝我添加了代碼! – 2010-08-16 12:20:50

回答

1

我一直無法重現您所看到的您提供的代碼的行爲。是否有任何形式的其他設置(可能在設計器中設置)可能導致這種情況?

而且,Hide()函數實際上並沒有關閉該窗口。這相當於將Visible屬性更改爲False。閱讀關於隱藏here

如果你真的想關閉窗口,你應該打電話給Me.Close()

+0

是的,它是DialogResult設置爲取消 - 哎呀! – 2010-08-16 17:26:01

0

嘗試設置子窗體的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 
+0

你可能在錯誤的問題中輸入了這個嗎? – 2010-08-16 16:54:28

0

我能想到的唯一的事情是,你必須在表格B的事件處理程序被迷上了C型的按鈕單擊事件..雖然你怎麼會這樣做,卻沒有意識到我無法想象。

嘗試做

f.ShowDialog(Me) 

設置C型的家長,當你調用顯示對話框表格B的IssueOrderButton_Click事件我同意,你可能想使用Me.Close()而非Me.Hide()