Où dois-je contrôler le comportement du bouton de fermeture "X" dans le coin supérieur droit d'un winform?
Je suis de s'aventurer dans la fabrication de mon VB.NET demande un peu mieux à l'utilisation en rendant certaines des formes non modale.
Je crois que j'ai compris comment utiliser la dlg.Show() et de la dlg.Hide() au lieu d'appeler la dlg.ShowDialog(). J'ai une instance de ma boîte de dialogue non modale dans mon formulaire principal de l'application:
Public theModelessDialog As New dlgModeless
À feu vers le haut de la boîte de dialogue non modale j'appelle
theModelessDialog.Show()
et au sein de l'OK et Annuler des gestionnaires de bouton dans dlgModeless
j'ai
Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Hide()
End Sub
Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Hide()
End Sub
et qui semble bien fonctionner.
Le bouton "X" dans le coin supérieur droit est d'arriver à moi, si. Quand je ferme le formulaire avec le bouton, puis essayez à nouveau d'ouvrir le formulaire, je reçois
ObjectDisposedException était non gérée. Impossible d'accéder à un objet supprimé.
J'ai l'impression que je suis la plupart du chemin, mais je ne peux pas comprendre comment le faire de la façon suivante:
- Cacher que le "X" bouton
- Attraper le cas, donc je ne pas disposer de l'objet (juste le traiter comme je l'ai frappé Annuler)
Des idées?
La classe de cette boîte de dialogue est System.Windows.Forms.Form
.
source d'informationauteur John | 2010-05-15
Vous devez vous connecter pour publier un commentaire.
Utilisation
Me.Close()
à masquer le formulaire. Pour l'ouvrir, utilisez le code suivant:Si c'est l'enregistrement de données, alors vous aurez besoin de comprendre d'une certaine façon de les stocker (peut-être dans une variable statique/s dans la forme). C'est la méthode appropriée pour faire ce que vous essayez d'atteindre.
Vous aurez aussi de me pardonner si mon VB est éteint, il a été un moment.
Attraper le FormClosing de l'événement et, si la raison est UserClosing, ensemble d'Annuler l'événement pour vrai.
Quelque chose comme ce qui suit:
la formclosing événement me permet de faire une sortie gérée de la forme donc, j'ai inclus une question afin de confirmer la sortie. J'ai aussi une forme de drapeau bterminate à force de les annuler, où je veux et donc de ne pas poser la question. Merci de votre suggestion m'a aidé 🙂
@John cachait la forme dans son code, et les réponses ci-dessus fournissent une solution à cette affaire. Souvent, cependant, vous ne prévoyez pas d'utiliser à nouveau le formulaire, si vous avez vraiment le formulaire doit être Éliminé. Toutes Proches les activités relatives à être dans un endroit si vous Manipulez le FormClosing événement à l'aide de
Me.FormClosing
en l'ajoutant à anyCancel/Fermer/code de Sortie que vous avez déjà. par exemple, dans @John:Notez l'utilisation de la
Me.Dispose
au lieu de toutMe.Close
. Si vous laissez leMe.Close
vous apprendrez à créer une boucle infinie. Voir ce pour les différences subtiles entre les gros et les Éliminer.D'accord avec la manipulation de la FormClosing événement. Ou de modifier les propriétés du formulaire pour masquer le système de contrôle X.
J'ai tout essayé et ça ne fonctionne pas
si vous voulez juste de fermer, sans afficher une messagebox, vous aurez juste besoin:
Espère que cela vous aide...!