ホームページ > バックエンド開発 > C++ > フォームが開いているときに Application.OpenForms.Count がゼロを返すのはなぜですか?

フォームが開いているときに Application.OpenForms.Count がゼロを返すのはなぜですか?

Linda Hamilton
リリース: 2024-12-28 05:14:13
オリジナル
443 人が閲覧しました

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

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 カウントが発生します。

このバグを回避するには、ウィンドウの後に次のプロパティを変更しないでください。作成:

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

の代わりに、これらのプロパティは、フォームの構築中、または CreateWindowEx() の再作成を含まない他の手段を通じて設定します。さらに、Application.OpenForms のみに依存することは避け、メッセージ ボックスを表示するクラスにフォーム参照を直接渡すことを検討してください。

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

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