Le formulaire WinForms ne se ferme pas si vous appuyez sur X ou sur Fermer () en C #

J’ai un problème un peu étrange avec WinForm qui semble refuser de fermer pour une raison étrange. J’ai un gui très simple qui parfois ne réagit pas pour moi en appuyant sur X ou lorsque j’utilise des événements sur des boutons, il atteint même Close() et ne fait rien ..

  private void buttonZapisz_Click(object sender, EventArgs e) { ssortingng plik = textBoxDokumentDoZaladowania.Text; if (File.Exists(plik)) { ssortingng extension = Path.GetExtension(plik); ssortingng nazwaPliku = Path.GetFileName(plik); SqlMethods.databaseFilePut(plik, comboBoxTypDokumentu.Text, textBoxKomentarz.Text, sKlienciID, sPortfelID, extension, nazwaPliku); Close(); } } 

Aucun événement n’est atsortingbué à FormClosed ou FormClosing . Alors, comment puis-je savoir ce qui ne va pas. Parfois, X fonctionnera après le chargement de l’interface graphique, mais après que j’ai Button sur Button pour enregistrer des éléments dans la firebase database, il atteint Close () dans cet événement de bouton et il est toujours visible et ne fait rien. Impossible d’utiliser X, ni ALT + F4. Je peux faire le tour de l’interface graphique et choisir d’autres valeurs pour ComboBox sans problème.

J’appelle GUI comme ceci:

  private void contextMenuDokumentyDodaj_Click(object sender, EventArgs e) { var lv = (ListView) contextMenuDokumenty.SourceControl; ssortingng varPortfelID = Locale.ustalDaneListViewKolumny(listViewNumeryUmow, 0); ssortingng varKlienciID = Locale.ustalDaneListViewKolumny(listViewKlienci, 0); if (lv == listViewDokumentyPerKlient) { if (varKlienciID != "") { var dokumenty = new DocumentsGui(varKlienciID); dokumenty.Show(); dokumenty.FormClosed += varDocumentsGuiKlienci_FormClosed; } } else if (lv == listViewDokumentyPerPortfel) { if (varPortfelID != "" && varKlienciID != "") { var dokumenty = new DocumentsGui(varKlienciID, varPortfelID); dokumenty.Show(); dokumenty.FormClosed += varDocumentsGuiPortfele_FormClosed; } } } 

Bien que je ne puisse pas fermer l’interface graphique, je peux aussi travailler sur l’interface graphique principale sans problème. Je peux ouvrir la même interface graphique et après avoir ouvert une nouvelle interface graphique, je peux la fermer rapidement. L’interface graphique est très simple avec quelques ComboBoxes , TextBoxes et un EditButton de Devexpress.

Éditer: Le code varDocumentsGuiPortfele_FormClosed me permet d’actualiser l’interface graphique (recharger les ListView en fonction de l’emplacement actuel de l’utilisateur).

  private void varDocumentsGuiPortfele_FormClosed(object sender, FormClosedEventArgs e) { TabControl varTabControl = tabControlKlientPortfele; if (varTabControl.TabPages.IndexOf(tabPageDokumentyPerKlient) == varTabControl.SelectedIndex) { loadTabControlKlientPortfeleBezZmianyUmowy(); } } 

Collez ce code dans vos classes de formulaire:

  protected override void OnFormClosing(FormClosingEventArgs e) { e.Cancel = false; base.OnFormClosing(e); } 

Lorsque cela fonctionne, vous voulez savoir pourquoi vous avez des gestionnaires d’événements Validation qui ne veulent pas que le formulaire soit fermé.

La prochaine chose que vous voulez vérifier est Debug + Exceptions, cochez la case Lancé pour Exceptions CLR. Cela garantit que vous n’avalez pas une exception empêchant la fermeture d’un formulaire. Ou pire, le système d’exploitation avalant l’exception , un vilain problème de Windows 7.

Si vous obtenez une exception dans votre méthode de fermeture, la méthode de fermeture de base n’est jamais appelée.

Mettez un {} catch {} autour de tout