Heim > Backend-Entwicklung > C++ > Warum gibt Application.OpenForms.Count Null zurück, wenn Formulare geöffnet sind?

Warum gibt Application.OpenForms.Count Null zurück, wenn Formulare geöffnet sind?

Linda Hamilton
Freigeben: 2024-12-28 05:14:13
Original
442 Leute haben es durchsucht

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

Application.OpenForms.Count meldet fälschlicherweise Null

In einigen Fällen gibt der Application.OpenForms-Zähler einen falschen Wert von Null zurück, wodurch der Wert verdeckt wird tatsächliche Anzahl geöffneter Formulare. Dieses Problem tritt auf, wenn bestimmte Eigenschaften nach der Fenstererstellung geändert werden, insbesondere solche, die sich auf den Fensterstil auswirken.

Betrachten Sie das folgende Beispiel, in dem die ShowInTaskbar-Eigenschaft nach der Initialisierung geändert wird:

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);
    }
}
Nach dem Login kopieren

Upon Wenn Sie ShowInTaskbar ändern, verschwindet das Formular aus der Application.OpenForms-Auflistung, obwohl es geöffnet bleibt. Dies ist auf einen zugrunde liegenden Windows Forms-Fehler zurückzuführen, bei dem das Ändern bestimmter Eigenschaften eine Neuerstellung des nativen Fensters mithilfe von CreateWindowEx() auslöst. Dadurch verliert die Anwendungsklasse den Überblick über das Formular, was zu falschen OpenForms-Zählungen führt.

Um diesen Fehler zu vermeiden, sehen Sie davon ab, die folgenden Eigenschaften nach dem Fenster zu ändern Erstellung:

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

Stattdessen Legen Sie diese Eigenschaften während der Formularerstellung oder auf andere Weise fest, die keine CreateWindowEx()-Erstellung beinhaltet. Vermeiden Sie außerdem, sich ausschließlich auf Application.OpenForms zu verlassen, und erwägen Sie die direkte Übergabe von Formularverweisen an Klassen, die Meldungsfelder anzeigen.

Das obige ist der detaillierte Inhalt vonWarum gibt Application.OpenForms.Count Null zurück, wenn Formulare geöffnet sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage