Application.OpenForms.Count が誤ってゼロを報告する
場合によっては、Application.OpenForms カウントが誤った値 0 を返し、開いているフォームの実際の数。この問題は、ウィンドウの作成後に特定のプロパティ、特にウィンドウのスタイルに影響を与えるプロパティが変更された場合に発生します。
ShowInTaskbar プロパティが初期化後に変更される次の例を考えてみましょう。
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); } }
Upon ShowInTaskbar を変更すると、フォームは開いたままであっても、Application.OpenForms コレクションから消えます。これは、特定のプロパティを変更すると、CreateWindowEx() を使用してネイティブ ウィンドウが再作成されるという Windows フォームの根本的なバグが原因です。その結果、Application クラスはフォームを追跡できなくなり、間違った OpenForms カウントが発生します。
このバグを回避するには、ウィンドウの後に次のプロパティを変更しないでください。作成:
の代わりに、これらのプロパティは、フォームの構築中、または CreateWindowEx() の再作成を含まない他の手段を通じて設定します。さらに、Application.OpenForms のみに依存することは避け、メッセージ ボックスを表示するクラスにフォーム参照を直接渡すことを検討してください。
以上がフォームが開いているときに Application.OpenForms.Count がゼロを返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。