+ Antworten
Ergebnis 1 bis 6 von 6
Like Tree2x Danke

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

Eine Diskussion über [C#] Form Schließen und auf null setzen im Forum Technik Ecke. Teil des Off Topic-Bereichs; Moin zusammen. Hab ein Problem.. Ich habe zwei Forms. Sagen wir, dass Form A als Mainform dient und immer offen ...

  1. #1
    데르 외계
    Avatar von zokker13
    Registriert seit
    12.10.2008
    Ort
    Wuppertal
    Beiträge
    6.660
    Name
    Philipp
    Nick
    cWc.zokker13

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

    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:
    1.  
    2.  
    3.  
    4. private void Check(ref Form B)
    5. {
    6. if (B != null)
    7. {
    8. B.Close();
    9. B= null;
    10. }
    11.  
    12. else
    13. {
    14. B = new Form();
    15. B.Show();
    16. }
    17. }
    18.  


    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!

  2. #2
    데르 외계
    Avatar von zokker13
    Registriert seit
    12.10.2008
    Ort
    Wuppertal
    Beiträge
    6.660
    Name
    Philipp
    Nick
    cWc.zokker13
    *push*

    Offensichtlich hab ich irgendwelchen Quark geschrieben.
    Oder hat echt keiner ne' Idee?

  3. #3
    Hauptgefreiter

    Registriert seit
    19.03.2012
    Ort
    Berlin
    Alter
    28
    Beiträge
    395
    Name
    Hendrik
    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?

  4. #4
    데르 외계
    Avatar von zokker13
    Registriert seit
    12.10.2008
    Ort
    Wuppertal
    Beiträge
    6.660
    Name
    Philipp
    Nick
    cWc.zokker13
    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.

  5. #5
    Feldwebel
    Avatar von Gonzo
    Registriert seit
    13.07.2004
    Ort
    Berlin
    Alter
    46
    Beiträge
    1.669
    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 ?

    MfG
    Gonzo

  6. #6
    데르 외계
    Avatar von zokker13
    Registriert seit
    12.10.2008
    Ort
    Wuppertal
    Beiträge
    6.660
    Name
    Philipp
    Nick
    cWc.zokker13
    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:
    1.  
    2. private void HandleInput(ref Form bfForm)
    3. {
    4. /* Open/ Close form, using the Keys- combination */
    5. if (HotkeysPressed(keya, keyb, keyc))
    6. {
    7. if (bfForm == null)
    8. bfForm = new Form();
    9.  
    10. if (bfForm.Created)
    11. bfForm.Close();
    12.  
    13. else
    14. {
    15. bfForm = new Form();
    16. bfForm.Show();
    17. }
    18.  
    19.  
    20. }
    21. }
    22.  

+ Antworten

Ähnliche Themen

  1. laaaangweilig und auf niiiichts bock !!!
    Von DonQuiK^ im Forum Kuschelecke
    Antworten: 31
    Letzter Beitrag: 25.05.2006, 00:04
  2. Fehler beim Online gaming generals und stunde null
    Von bohnevomfeld im Forum Generals
    Antworten: 0
    Letzter Beitrag: 03.12.2005, 14:06
  3. Deutsche Generäle und Stunde Null Version zur Englischen machen
    Von stefros im Forum CCG/ZH Technik Ecke
    Antworten: 2
    Letzter Beitrag: 18.08.2005, 16:32
  4. wie kann ich meine stats auf null setzen?
    Von kr_fe_dr im Forum CCG/ZH Fairplay
    Antworten: 15
    Letzter Beitrag: 13.07.2005, 02:28

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •