2009-09-03 4 views
0

Je développe une application WinForms dans VB.NET, qui gère les ensembles de données de style, et lorsque l'utilisateur clique sur l'étiquette d'un autre jeu, il affiche une boîte de dialogue "Vous laissez ce style prédéfini pour en éditer un autre. Mais, je suis confronté au problème que, lorsque l'utilisateur clique sur l'une ou l'autre option, et la boîte de dialogue se ferme, tout doit être actualisé, et le chargement du formulaire semble de nouveau bonne option.VB.NET: Comment fermer et rouvrir une boîte de dialogue dans ce cas?

J'ai essayé de mettre un sous public sur un module, qui fait cela:

Public Sub CloseOpenStyleDlg() 
    KeepOrDiscardPrompt.Close() 
    StylesDlg.Close() 
    StylesDlg.ShowDialog() 
End Sub 

Mais dès que ce sous est appelé à partir de l'invite, il se bloque l'application. (ne montre pas une erreur dans le débogage, se bloque simplement) Comment devrais-je, à partir d'un dialogue donné, fermer la boîte de dialogue, c'est parent, et rouvrir son parent? (qui déclenche tout le code Dialog_Load() du parent)

Merci d'avance! :)

Répondre

1

Vous devez de nouveau instancier le dialogue. Si je prends votre code par exemple:

Public Sub CloseOpenStyleDlg() 
    KeepOrDiscardPrompt.Close() 
    StylesDlg.Close() 
    StylesDlg = new StylesDlg() 
    StylesDlg.ShowDialog() 
End Sub 
+0

Merci =) J'ai réorganisé mon code en dehors de Form_Load(), et à partir de maintenant je vais presque toujours respecter les meilleures pratiques (le code mal écrit est un enfer à mantenir!), Mais votre exemple a résolu mon doute sur comment rouvrir un formulaire, donc c'est choisi =) –

0

Lorsqu'un formulaire est fermé, toutes les ressources créées dans l'objet sont fermées et le formulaire est supprimé.

Si vous souhaitez réutiliser l'instance Window, utilisez plutôt la fonction StylesDialog.Hide().

+0

Mais, hide appelle à nouveau l'événement Form_Load()? Intuitivement, je supposais que c'était quelque chose comme le rendre invisible mais sans fermer. –

+0

Je ne l'ai pas testé mais je suppose que Form_Load() n'est pas appelé lorsque vous appelez à nouveau Show. –

+0

Cacher puis afficher un formulaire ne déclenchera pas l'événement Load. Si vous avez un code d'initialisation qui doit être appelé à nouveau, il peut être supprimé de la méthode Form_Load et placé dans une autre méthode et appelé explicitement. – snarf