Maison >développement back-end >C++ >Pourquoi Application.OpenForms.Count renvoie-t-il toujours zéro dans mon application Windows Forms ?

Pourquoi Application.OpenForms.Count renvoie-t-il toujours zéro dans mon application Windows Forms ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-28 20:47:10744parcourir

Why Does Application.OpenForms.Count Always Return Zero in My Windows Forms App?

Application.OpenForms.Count renvoie toujours zéro

Dans les applications Windows Forms, l'accès à la propriété Application.OpenForms est couramment utilisé pour obtenir une collection des formulaires actuellement ouverts. Cependant, il existe un bug connu qui peut amener la propriété Application.OpenForms.Count à renvoyer systématiquement zéro.

Ce problème se produit lorsque certaines propriétés sont modifiées après la création du formulaire. Ces propriétés inclure :

  • ShowInTaskbar
  • FormBorderStyle
  • ControlBox
  • Min/MaximizedBox
  • RightTo LeftLayout
  • HelpButton
  • Opacity
  • TransparencyKey
  • ShowIcon
  • MdiParent

Quand Si l'une de ces propriétés est modifiée après l'appel de CreateWindowEx() pour créer la fenêtre du formulaire, Windows Forms doit détruire la fenêtre d'origine et en créer une nouvelle avec les indicateurs de style mis à jour. Cependant, en raison d'un bug, la classe Application n'ajoute pas correctement le nouveau formulaire à la collection OpenForms. Il en résulte que la propriété Application.OpenForms.Count renvoie toujours zéro.

Solution

Pour éviter ce bug, définissez toujours l'une des propriétés mentionnées ci-dessus uniquement dans le constructeur du formulaire. Évitez de les modifier dans les gestionnaires d'événements ou dans tout autre code qui s'exécute après l'appel de CreateWindowEx().

Alternatives à Application.OpenForms

En général, il est conseillé d'éviter de s'appuyer sur sur la propriété Application.OpenForms en raison de ce bug. Envisagez plutôt de transmettre l'instance de formulaire à la classe qui doit afficher la boîte de message via son constructeur. MessageBox détermine généralement automatiquement la fenêtre parent correcte et affichera la boîte de message sur la fenêtre active dans la plupart des cas.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn