Maison > développement back-end > C++ > Pourquoi Application.OpenForms.Count renvoie-t-il zéro lorsque les formulaires sont ouverts ?

Pourquoi Application.OpenForms.Count renvoie-t-il zéro lorsque les formulaires sont ouverts ?

Linda Hamilton
Libérer: 2024-12-28 05:14:13
original
434 Les gens l'ont consulté

Why Does Application.OpenForms.Count Return Zero When Forms Are Open?

Application.OpenForms.Count rapporte incorrectement zéro

Dans certains cas, le nombre Application.OpenForms renvoie une valeur incorrecte de zéro, masquant le nombre réel de formulaires ouverts. Ce problème survient lorsque des propriétés spécifiques sont modifiées après la création d'une fenêtre, en particulier celles qui ont un impact sur le style de la fenêtre.

Considérez l'exemple suivant, où la propriété ShowInTaskbar est modifiée après l'initialisation :

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        button1.Click += button1_Click;
    }
    private void button1_Click(object sender, EventArgs e) {
        Console.WriteLine(Application.OpenForms.Count);
        this.ShowInTaskbar = !this.ShowInTaskbar;
        Console.WriteLine(Application.OpenForms.Count);
    }
}
Copier après la connexion

Lorsque en modifiant ShowInTaskbar, le formulaire disparaît de la collection Application.OpenForms même s'il reste ouvert. Cela est dû à un bogue sous-jacent de Windows Forms dans lequel la modification de propriétés spécifiques déclenche une recréation de la fenêtre native à l'aide de CreateWindowEx(). En conséquence, la classe Application perd la trace du formulaire, ce qui entraîne un nombre d'OpenForms incorrect.

Pour éviter ce bug, évitez de modifier les propriétés suivantes après la fenêtre création :

  • ShowInTaskbar
  • FormBorderStyle
  • ControlBox
  • Min/MaximizedBox
  • RightToL eftLayout
  • HelpButton
  • Opacity
  • TransparencyKey
  • ShowIcon
  • MdiParent

Au lieu de cela, définissez ces propriétés lors de la construction du formulaire ou par d'autres moyens qui n'impliquent pas la recréation CreateWindowEx(). De plus, évitez de vous fier uniquement à Application.OpenForms et envisagez de transmettre les références de formulaire directement aux classes qui affichent des boîtes de message.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal