ホームページ > バックエンド開発 > C++ > Windows フォーム アプリで Application.OpenForms.Count が常にゼロを返すのはなぜですか?

Windows フォーム アプリで Application.OpenForms.Count が常にゼロを返すのはなぜですか?

Patricia Arquette
リリース: 2024-12-28 20:47:10
オリジナル
717 人が閲覧しました

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

Application.OpenForms.Count は常にゼロを返します

Windows フォーム アプリケーションでは、コレクションを取得するために Application.OpenForms プロパティへのアクセスが一般的に使用されます。現在開いているフォームの数。ただし、Application.OpenForms.Count プロパティが一貫してゼロを返す可能性がある既知のバグがあります。

この問題は、フォームの作成後に特定のプロパティが変更された場合に発生します。これらのプロパティinclude:

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

Whenこれらのプロパティのいずれかは、フォームのウィンドウを作成するために CreateWindowEx() が呼び出された後に変更されるため、Windows フォームは元のウィンドウを破棄し、更新されたスタイル フラグを使用して新しいウィンドウを作成する必要があります。ただし、バグのため、Application クラスは新しいフォームを OpenForms コレクションに正しく追加しません。この結果、Application.OpenForms.Count プロパティは常にゼロを返します。

Solution

このバグを回避するには、上記のプロパティのいずれかを常に、フォームのコンストラクター。イベント ハンドラーや、CreateWindowEx() が呼び出された後に実行されるその他のコードでこれらを変更することは避けてください。

Application.OpenForms の代替

一般に、依存しないことをお勧めします。このバグのため、Application.OpenForms プロパティに問題があります。代わりに、コンストラクターを通じてメッセージ ボックスを表示する必要があるクラスにフォーム インスタンスを渡すことを検討してください。通常、MessageBox は正しい親ウィンドウを自動的に決定し、ほとんどの場合、アクティブなウィンドウの上にメッセージ ボックスを表示します。

以上がWindows フォーム アプリで Application.OpenForms.Count が常にゼロを返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート