2010-08-16 11 views
0

J'ai trois formes: A, B et C.Pourquoi cache-t-il également le formulaire parent?

Lorsqu'un bouton est cliqué, A affiche B. De même, B affiche C. Les deux utilisent la méthode ShowDialog().

Toutefois lorsque j'utilise la méthode Hide() (à l'intérieur d'un événement Button Click) sur le formulaire C pour le fermer, le formulaire B se ferme également.

Pourquoi cela serait-il? Pour autant que je puisse voir, cela ne devrait pas être le cas. Je n'ai certainement pas écrit de code pour le dire.

Voici le code:

' 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 

MISE À JOUR: Je suis un idiot. DialogResult a été défini sur Cancel sur le bouton comme je l'ai copié + collé à partir du bouton Fermer existant et pas réalisé que la propriété a été définie. Merci pour vos suggestions de toute façon tout le monde!

+0

Peut-être, un code? J'ai essayé, tout allait bien. – 26071986

+0

Merci j'ai ajouté le code! –

Répondre

1

Je n'ai pas réussi à reproduire le comportement que vous voyez avec le code que vous avez fourni. Y a-t-il d'autres paramètres sur l'un des formulaires (peut-être définis dans le concepteur) qui pourraient en être la cause?

En outre, la fonction Hide() ne ferme pas réellement la fenêtre. Cela équivaut à remplacer la propriété Visible par False. Lisez à propos de Hide here. Si vous voulez vraiment fermer la fenêtre, appelez Me.Close().

+0

Oui, c'était DialogResult réglé sur Annuler - oups! –

0

Essayez de définir la propriété MdiParent du formulaire enfant:

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

Avez-vous posé cette question dans la mauvaise question? –

0

La seule chose que je peux penser est que vous avez un gestionnaire d'événements dans le formulaire B qui est relié au formulaire cliquez sur l'événement bouton de C .. mais comment vous feriez cela sans réaliser que je ne peux pas imaginer.

Essayez le réglage formulaire parent de C lorsque vous appelez émission de dialogue dans l'événement IssueOrderButton_Click Form B en faisant

f.ShowDialog(Me) 

Je suis d'accord que vous voulez probablement utiliser Me.Close() plutôt que Me.Hide()