Laden...

mehrfaches Öffnen eines Formulares unterbinden

Erstellt von PalPal vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.218 Views
PalPal Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren
mehrfaches Öffnen eines Formulares unterbinden

Hallo!

Ich habe eine Applikation, welche aus mehreren Formularen besteht, die über Button-Clicks geöffnet werden. Allerdings öffnet sich dieses Formular bei einem weiteren Klick auf den Button erneut.

Code also z.B.:


        private void B_Datum_Click(object sender, EventArgs e)
        {
            Form f = new F_Datum();
            f.Show();
        }

**Es müsste also eine Überprüfung stattfinden, ob das Formular F_Datum bereits geöffnet ist. ** (allerdings weiss ich nicht wie 😉 )

Die Möglichkeit, den Button nach Klick zu sperren entfällt, da dies vom Kunden nicht gewünscht ist und das Sperren der Buttons bereits eine andere Funktionalität der Applikation bereitsstellt.

über eine kurze Hilfe würde ich mich sehr freuen!

Gruß
PalPal

107 Beiträge seit 2011
vor 12 Jahren

Ansonsten würde sich vielleicht ein Singleton anbieten.

q.e.d.

_
48 Beiträge seit 2011
vor 12 Jahren

Hallo,

verwende statt f.Show(); einfach f.ShowDialog();

Das Formular mit dem Button ist dann gesperrt. Wäre das ok?

Gruß
Bugrick

Gelöschter Account
vor 12 Jahren

Du kannst dir einfach merken, ob die Form bereits geöffnet wurde. Z.B. in einer Boolschen Variable. Beim erneuten Klick prüfst du die Varaible ab. Beim Schließen der Form setzt du die Variable wieder zurück.

E
180 Beiträge seit 2010
vor 12 Jahren

foreach (Form F in Application.OpenForms) {                        
 if ((F is F_Datum)) {
       F.Show(); F.Fokus();
 }
}

Das sollte es eigentlich auch tun.

Gruß

PalPal Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren

Danke für die Antworten!
ich arbeite es einfach mal kurz von oben nach unten ab:

  • was genau Singleton ist / wie es funktioniert weiss ich leider nicht 😃
  • mit ShowDialog kann ich eventuell arbeiten.
  • das Verwenden einer bool'schen Variable stelle ich mir in diesem Fall ein wenig schwer vor

und bei der Foreach-Schleife (@Equilibrium) tut sich leider nichts - also, das Formular wird nicht geöffnet.

E
180 Beiträge seit 2010
vor 12 Jahren

Das Formular muss natürlich auch offen sein, sonst funzt es logischerweise nicht. Denn OpenForms liefert dir alle geöffneten Formulare zurück - d.h. du musst das nur in die Buttonfunktion mit reinpacken und dann entscheiden ob du ein neues Formular erzeugst oder das alte reaktivierst.

PS: die boolsche Variable is im grunde eh überflüssig denn openforms liefert dir ja bereits den status den du brauchst.

Gelöschter Account
vor 12 Jahren

ich arbeite es einfach mal kurz von oben nach unten ab

Ok ich mach das mal auch:

was genau Singleton ist / wie es funktioniert weiss ich leider nicht 😃

Benutze die Forumssuche und Google. Du wirst viele Ergebnisse finden.

mit ShowDialog kann ich eventuell arbeiten.

Das macht genau das, was du nicht wolltest.

das Verwenden einer bool'schen Variable stelle ich mir in diesem Fall ein wenig schwer vor

Denke nochmals darüber nach. Das sind insgesamt 5 Zeilen Code. Was daran schwierig sein soll, entzieht sich meiner Vorstellungskraft.

und bei der Foreach-Schleife (@Equilibrium) tut sich leider nichts - also, das Formular wird nicht geöffnet.

Das ist so, wenn man einfach Code per Copy&Paste verwendet.

@Equilibrium:
Jain. wenn du den gleichen Typen unter Umständen öfters offen haben können musst, wird es mit deiner Methode umständlicher. Aber ansonsten hast du natürlich Recht.

Hinweis vor 12 Jahren

Zusätzlich hier noch die Ermahnung, das sich dieses Thema nun haarscharf an der Kante zu [Hinweis] Wie poste ich richtig? Punkt 1.1 und 1.1.1 bewegt.

Bitte beachte die Forumsregeln, sonst muss ich das Thema schließen.

E
180 Beiträge seit 2010
vor 12 Jahren

@Equilibrium:
Jain. wenn du den gleichen Typen unter Umständen öfters offen haben können musst, wird es mit deiner Methode umständlicher. Aber ansonsten hast du natürlich Recht.

das ist klar, aber war ja hier nicht gefordert, es sollte ja immer nur eins offen sein.

PalPal Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren

Danke, ich habe mir nun aus der foreach-Schleife zusammen mit einer bool'schen Variable etwas gebastelt, sodass das Form nur geöffnet wird, wenn es nicht in Openforms steht und sonst das geöffnete focusiert wird.

Dass es Probleme gibt, die vermutlich simpel zu lösen sind, einen aber viel zu lange beschäftigen kennt bestimmt jeder 😃_

  • kann also geschlossen werden jetzt -
Gelöschter Account
vor 12 Jahren

Wenn du die Foreach Variante verwendest, ist die Boolsche Variable nicht notwendig. Hierzu kann ich dir die schlüsselwörter continue und break ans herz 😃 legen. Diese machen die Boolsche Variable überflüssig.

  • kann also geschlossen werden jetzt -

Wir schließen nur bei Regelverstößen.