gelöst [C#] Form Schließen und auf null setzen

zokker13

Moderator
Joined
Oct 12, 2008
Messages
6,719
Points
235
Moin zusammen.

Hab ein Problem..
Ich habe zwei Forms.
Sagen wir, dass Form A als Mainform dient und immer offen bleibt.
Form B wiederum wird nur geöffnet/ geschlossen, wenn ich eine Keykombination betätige.
Dieser Teil funktioniert wunderbar.

Ich habe es folgendermaßen gelöst:
C#:
private void Check(ref Form B)
{
            if (B != null)
                {
                    B.Close();
                    B= null;
                }

                else
                {
                    B = new Form();
                    B.Show();
                }
}


Da die Frage kommen wird: "Wieso machst du die Form B nicht einfach unsichtbar und zeigst sie bei Bedarf?"
Habe ich versucht. Es kommt einfach willkürlich ein Handle- Crash. Den kann ich leider nicht reproduzieren.

Wie dem auch sei, der Code funktioniert jedenfalls.


Jetzt kommt der Knackpunkt:
Form B soll ja auch mal geschlossen werden ohne dass der Benutzer die Keykombination betätigen muss.
Wir sind schließlich benutzerfreundlich.


Und naja... Daran hänge ich halt.
Es ist nicht so, dass es ein Fehler ausspuckt, nein.
Nur wird die Form B dann nicht auf "null" gesetzt. Sie ist jedoch nicht mehr da.

Wenn der Benutzer jetzt die Form wieder anzeigen möchte, muss er die obige Funktion zwei mal ausführen.
Das kann zu nerfigen Bug- Reports führen und ist einfach nicht schön.


Wie kann ich eine eigene Form auf null setzen?


Noch ein paar Infos:
Meine Form B kann auf Form A zugreifen.
Jedoch ist es nicht möglich, die Variable für Form B (in Form A) "public" zu setzten. (Inkonsistenter Zugriff)


Ich hoffe jemand kann mir helfen!
Danke im Voraus!
 
*push*

Offensichtlich hab ich irgendwelchen Quark geschrieben.
Oder hat echt keiner ne' Idee? :(
 
Ich versteh leider nicht so ganz was deine Frage ist^^

Du möchtest mit der ersten Form A eine zweite Form öffnen und schließen?
Da müsstest einfach einen von denen :

this.Visible = false; // form wird versteckt
this.Close(); // form wird geschlossen
this.Focus(); // form in vordergrund

verwenden oder?
 
Die Form darf nur geschlossen und geöffnet werden.
Verstecken geht nicht.

Der Code oben zeigt, wie das funktioniert.
Und dieser Code ist auch in der Form A.

Wenn ich aber in Form B bin und diese schließe (Kreuz in der Ecke oben), muss ich den Code in der Form A zwei mal ausführen.
Also möchte ich, dass meine Form auf das schließen (mittels Kreuz in der Ecke) reagiert.
Das wäre auch kein Problem.
Nur müsste ich die Form auf "null" setzen, damit der Trigger in der ersten Form ausgelöst wird.
Und dabei stecke ich gerade!

Hoffe es ist verständlicher. :)
 
Code:
        public Form test = new test();
        private void CloseForm()
        {
            if (!test.Created)
            {
                test = new test();
                test.Show();
            }
            else
                test.Close();
        }
Das sollte doch reichen oder ?
Man kann die Form jetzt per Aufruf öffnen und schliessen, das x funktioniert auch.
Versteh nur nicht warum du die Variable nicht public setzen kannst.
Oder hab ich was falsch verstanden ?
 
Das reicht fast!
Hab es aber auf null überprüft und dann ggf. neu zugewiesen.
Dann funktioniert es.

Kannte die Eigenschaft "Created" garnicht.
Vielleicht sollte ich mir die Klassen in msdn mal durchlesen...
Schon oraktisch!


Dank dir!

P.S. So siehts jetzt aus:
C#:
private void HandleInput(ref Form bfForm)
        {
            /* Open/ Close form, using the Keys- combination */
            if (HotkeysPressed(keya, keyb, keyc))
            {
                if  (bfForm == null)
                    bfForm = new Form();

                if (bfForm.Created)
                    bfForm.Close();

                else
                {
                    bfForm = new Form();
                    bfForm.Show();
                }
                    
                
            }
}
 
Back
Top Bottom