Überprüfen ob Form schon existiert



  • Hallo zusammen!
    Ich habe ein Problem bei einer Anwendung. Und zwar möchte ich überprüfen, ob ein bestimmtes Fenster schon geöffnet ist. Wie bekomme ich das hin?

    Meine Suche auf MSDN und Google mit den Stichworten "Form Exists" hat mich leider nicht weiter gebracht. Dann habe ich nach Beiträgen in Foren gesucht, wo ähnliches schonmal gefragt wurde. Aber ich habe nicht so wirklich was gefunden. Das einzige was ich gefunden habe war ein Beispiel in Visual Basic: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=585631&SiteID=1
    Ich habe es leider nicht geschafft das Visual Basic in C# umzuschreiben.

    foreach(Form f in Application.OpenForms)
    {
        if( f.GetType() == Form1.GetType() ) // Form1 wird gesucht
        {
            MessageBox.Show("Fenster schon geöffnet");
        }
    }
    

    Ich weiß dass es so eigentlich nicht gehen kann. Aber ich weiß leider überhaupt nichtm wie ich das machen kann. Könntet ihr mir einen Tip geben?

    Danke, viele Grüße



  • geb doch jeder form einen eindeutigen tag, den kannst du dann prüfen!



  • Das VB Beispiel prüft mit dem is Operator ob die Instanz f vom Typ Form1 ist.

    Das kannst Du an sich genauso in C# übernehmen, dort gibt es diesen operator auch.

    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            Form2 dlg = new Form2();
            public Form1()
            {
                InitializeComponent();
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                foreach(Form f in Application.OpenForms)
                {
                    if (f is Form2)
                        MessageBox.Show("Form2 ist offen");
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                dlg.Show();
            }
        }
    }
    


  • foreach(Form f in Application.OpenForms)
    {
        if( f.GetType() == typeof(Form1) ) // Für Typen musst du typeof() verwenden
        {
            MessageBox.Show("Fenster schon geöffnet");
        }
    }
    


  • Hi!

    Danke an alle 3. Ich habe mich jetzt für die C#-Variante des VB-Beispiels entschieden. Den is-Operator kannte ich noch nicht. Jetzt klappt es wunderbar.

    Danke shcön!



  • Mal interessehalber:
    was spricht gegen eine statische Klassenvariable ?



  • - Die Abfrage könnte aus verschiedensten Instanzen gestellt werden
    - Man kennt den Typ aber nich die Instanz
    - Man möchte mal eine Form zweiter Instanz öffnen, mal die bestehende verwenden



  • Knuddlbaer schrieb:

    - Die Abfrage könnte aus verschiedensten Instanzen gestellt werden

    Geht auch mit einer stat. KV

    Knuddlbaer schrieb:

    - Man kennt den Typ aber nich die Instanz
    - Man möchte mal eine Form zweiter Instanz öffnen, mal die bestehende verwenden

    Danach war nicht gefragt



  • @Knuddlbaer

    Sorry, falls das etwas arrogant rueber kommt; soll kein
    Angriff gegen dich sein.
    Vielleicht ist die Problemstellung einfach schlecht formuliert.



  • Du hast nach möglichkeiten gefragt die gegen eine statische Klasse sprechen, ich hab ein paar, die mir spontan eingefallen sind genannt.

    Die Fragestellung lässt keinerlei Spielraum für Schlußfolgerungen (nach einer statischen Variable wurde auch nicht gefragt) also nimmt man einfach mal was allgemeines an. Hast Du ja auch mit den Statischen Variablen.

    Die Diskussion muss ja (wenn das eigentliche Thema beendet ist) sich nicht streng an (dürftige) Vorgaben halten. Auch wenn man annahmen trifft die weder die Aufgabenstellung noch die Vorstellung der Diskussionspartner treffen kann man doch viel dazu lernen.

    Also kurz: Passt schon 🤡



  • Hi!

    Da hat sich ja noch einiges getan 🙂

    _abs schrieb:

    Mal interessehalber:
    was spricht gegen eine statische Klassenvariable ?

    Was spricht für eine statische Klassenvariable? Was ist an der anderen Lösung schlechter?

    Ich erkenne da leider noch keinen Unterschied.

    Viele Grüße



  • Gast2 schrieb:

    Was spricht für eine statische Klassenvariable? Was ist an der anderen Lösung schlechter?

    Die anderen Loesungen sind keinesfalls schlecht. Kommt halt darauf an was du machen willst; deshalb ja auch meine Frage.
    Wenn du nur eine Variable abfragen musst ist das natuerlich weniger Aufwand und kann schon um einiges schneller sein.



  • Hi!

    ich habs jetzt mal mit der statischen Klassenvariablen ausprobiert und ich bin zu dem Schluss gekommen, dass es so einfacher ist.

    Vielen Dank und Viele Grüße, Gast2


Anmelden zum Antworten