Application.OpenForms.Count は常にゼロを返します
Windows フォーム アプリケーションでは、コレクションを取得するために Application.OpenForms プロパティへのアクセスが一般的に使用されます。現在開いているフォームの数。ただし、Application.OpenForms.Count プロパティが一貫してゼロを返す可能性がある既知のバグがあります。
この問題は、フォームの作成後に特定のプロパティが変更された場合に発生します。これらのプロパティinclude:
Whenこれらのプロパティのいずれかは、フォームのウィンドウを作成するために CreateWindowEx() が呼び出された後に変更されるため、Windows フォームは元のウィンドウを破棄し、更新されたスタイル フラグを使用して新しいウィンドウを作成する必要があります。ただし、バグのため、Application クラスは新しいフォームを OpenForms コレクションに正しく追加しません。この結果、Application.OpenForms.Count プロパティは常にゼロを返します。
Solution
このバグを回避するには、上記のプロパティのいずれかを常に、フォームのコンストラクター。イベント ハンドラーや、CreateWindowEx() が呼び出された後に実行されるその他のコードでこれらを変更することは避けてください。
Application.OpenForms の代替
一般に、依存しないことをお勧めします。このバグのため、Application.OpenForms プロパティに問題があります。代わりに、コンストラクターを通じてメッセージ ボックスを表示する必要があるクラスにフォーム インスタンスを渡すことを検討してください。通常、MessageBox は正しい親ウィンドウを自動的に決定し、ほとんどの場合、アクティブなウィンドウの上にメッセージ ボックスを表示します。
以上がWindows フォーム アプリで Application.OpenForms.Count が常にゼロを返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。