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); } }
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 :
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!