Form schliessen/verstecken, 2. Form anzeigen... wie?

  • C#

Es gibt 40 Antworten in diesem Thema. Der letzte Beitrag () ist von nogood.

    Form1 würde nichts bringen, da ich ja dann immer das gleiche Form aufrufen würde. Aber, du hast mich auf die richtige Spur gebracht und ich denke, jetzt weiß ich, was ich machen muss, bzw. wo ich hier den Wald vor lauter Bäumen nicht gesehen habe.

    Danke an Alle Beteiligten
    @mrMo Jou.
    @svenk2 Das hatten wir bereits in Post #5. X(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    svenk2 schrieb:

    Form1 würde nichts bringen, da ich ja dann immer das gleiche Form aufrufen würde
    Den Anfang des Satzes versteh ich inhaltlich nicht. Warum würde das Dir nichts bringen? Der zweite Teil ist richtig:

    C#-Quellcode

    1. Form1 Hauptform = new Form1();
    2. Hauptform.Show();

    Du würdest mit diesem Code immer das gleiche Form aufrufen, nämlich das, was Du in Post#19, Bild#2 (rot) gepostet hast. Aber niemals das selbe! Das ist ein wesentlicher Unterschied.
    Daher die Frage: Was erwartest Du mit diesem Code zu sehen, was bekommst Du zu sehen und wo liegt der Unterschied?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @RodFromGermany

    Sorry, dann hatte ich das an dieser Stelle total missverstanden. Es war vermutlich alles zuviel, da ewig keine Lösung zu finden, dass man schon mit einem Hartholzbrett hätte zuhauen müssen bei mir. Ich schrieb ja auch "danke an alle Beteiligten", also gilt das natürlich auch dir. :) Auch wenn das hier ein Forum ist, wo man sich gegenseitig hilft, bin ich schon immer von Natur her so gewesen, dass ich danach dann immer überlege, wie man sich für die erhaltene Hilfe erkenntlich zeigen kann.

    @VaporiZed
    Nein, ich würde eben nicht das mit dem roten Hintergrund aufrufen, sondern in dem Fall vermutlich immer das Blaue. Denn der Code aus dem Beitrag #19 ist der Code des blauen Forms. Also genau des Forms, dass ja bei Buttonklick verschwinden soll. In dem Form das nach Buttonklick angezeigt werden soll, gibt es aber Form1 nicht, sondern dort heißt es "Hauptform".

    Quellcode

    1. private void BTN_Test_Click(object sender, EventArgs e)
    2. {
    3. Hauptform Hauptform = new Hauptform();
    4. this.Hide();
    5. Hauptform.Show();}


    So hätte es in dem Beispiel aus Post #19 aussehen müssen und so hatte es dann im Test auch funktioniert. Wie gesagt, jetzt bin ich ja da wo ich hin wollte. Ich habe in meinem Projekt ein Startform, aktuell mit nur einem Button, und wenn ich den anklicke, soll eben dieses Startform verschwinden (also mit this.Hide() ... Close() geht ja wohl nicht, nach meinen Recherchen) und ein zweites/anderes Form dafür sichtbar werden. Und eben das tut es jetzt.

    Andere Fragen/Probleme kommen von meiner Seite sicher noch, eins hab ich auf jeden Fall noch, aber dazu dann ein neuer Post. Hier bin ich jedenfalls schon mal ein riesen Schritt weiter.


    Und noch mal, ich danke allen Beteiligten für die Hilfe und Engelsgeduld.

    Lg
    @svenk2 Dein Vorhaben funktioniert so nicht, weil Du die Hauptform schließt.
    Probierma dies:

    C#-Quellcode

    1. private void button1_Click(object sender, EventArgs e)
    2. {
    3. using (FormRot dlg = new FormRot())
    4. {
    5. this.Hide();
    6. dlg.ShowDialog();
    7. this.Show(); // this.Close();
    8. }
    9. }
    Statt this.Show() kannste auch this.Close() aufrufen, dann wird das Programm beendet.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    @svenk2 Dein Vorhaben funktioniert so nicht, weil Du die Hauptform schließt.


    Das verstehe ich gerade nicht. Warum schließe ich das Hauptform? Ich habe in meinem Projekt, sowie auch in dem Test von vorhin, aktuell 2 Forms, ein drittes soll später noch dazu kommen.

    1. Form = Startform
    2. Form = Hauptform

    Startform (heißt auch so): Beinhaltet, wenns fertig ist, 3 Buttons.
    1. Testversion starten
    2. Lizenzcode speichern (Dazu gibt es dann natürlich noch eine Textbox)
    3. Lizenzcode holen
    Hauptform (heißt auch so): beinhaltet dann das eigentliche Programm

    Bei Klick auf "Testversion starten" soll dann das Startform "verschwinden" und das Hauptform sichtbar sein. Also müsste mein Code richtig sein aus Post #24

    Mit dem Code von dir jetzt bekomme ich ne Fehlermeldung: Allerdings nur in meinem Projekt, im Testprojekt geht alles ohne Fehlermeldung. Muss ich nicht verstehen, obwohl in beiden Projekten die Visible Eigenschaften identisch sind.

    ​System.InvalidOperationException: "Das Formular, das bereits sichtbar ist, kann nicht als modales Dialogfeld angezeigt werden. Legen Sie die Visible-Eigenschaft des Formulars auf "false" fest, bevor Sie showDialog aufrufen."


    Habe dann die Anweisung befolgt und das Form auf Visible=false gestellt, aber die Fehlermeldung bleibt trotzdem. Hätte nicht gedacht, dass ein Wechsel zwischen zwei Forms sich als so kompliziert herausstellt. Naja, aller Anfang ist schwer.

    svenk2 schrieb:

    C#-Quellcode

    1. this.Hide();
    Hauptform ist nicht die, die Du Hauptform nennst, sondern die, die in Program.cs instanziiert wird.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @svenk2 Na dann musst Du dann eben im zweiten Fall den Code von Post #25 einfügen.
    Und vergiss nicht, vorher die Settings zu laden. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie schon erwähnt, mit dem Code aus Post #25 bekomm ich eine Fehlermeldung. Und Settings laden ist da groß nicht, weil das Programm sich alles aus einer Textdatei holt. Diese Textdatei wird von einem externen, nicht von mir stammenden Programm, beschrieben und mit meinem Programm wird diese Datei ausgelesen und mit den einzelnen Werten weitergearbeitet.
    @svenk2 Deine in Post #26 beschriebene Fehlermeldung passt nicht zum Code in Post #25.
    Du hast da wohl was falsch abgeschrieben und / oder verwechselt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @svenk2: Finde den relevanten Unterschied zu meinem Testprojekt, in dem das gewünschte Verhalten problemlos funktioniert, und berichte bitte.
    Dateien
    • WinFormsCS.zip

      (17,37 kB, 9 mal heruntergeladen, zuletzt: )
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @VaporiZed So was in der Art.
    @svenk2 Füge mal diesen Code in ein nagelneues Projekt ein.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So, sorry dass ich mich jetzt erst melde, bin aber erst seit gestern Abend wieder zu Hause.

    Also: In deinem Testprojekt @VaporiZed klappt es. Hab dann auch noch mal ein neues Projekt wie von @RodFromGermany vorgeschlagen erstelt, auch da funktioniert es, hier ist aber auch noch nicht soviel drin. Müsste jetzt erst alles Schritt für Schritt aus meinem "alten" Projekt in das neue packen um dann weiter testen zu können.

    Die Vermutungen von @ErfinderDesRades kann ich jetzt nicht wirklich bestätigen. Außer diesem hier hab ich kein .ShowDialog() oder ähnliches in meinem Projekt drin, auch nen eigenen Konstruktor wüsste ich jetzt auch nicht und auch das VS spinnt glaub ich eher nicht.


    Aber ich vermute mal, ich muss eh nach einer anderen Lösung umschauen, denn letztendlich bleibt das Form ja trotzdem geöffnet, es wird ja nur "unsichtbar" gemacht. Es findet zwar nicht so häufig ein Wechsel zwischen den Forms statt, aber ich kann mir denken, dass es dennoch "nicht die feine englische Art" ist und das es elegantere Methoden gibt. Ist zumindest eine Vermutung.

    svenk2 schrieb:

    auch da funktioniert es
    Ich denke mal, Du hast in Deinem Projekt iwo total verkorksten Code drinne, den Du bei dieser Gelegenheit eliminieren könntest.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja, ich werde mal schauen, da ich nicht mein ganzes Projekt jetzt einfach so veröffentlichen möchte. Aber eins werde ich mal tun. Ich werde im Laufe der nächsten Woche, vorher werde ich es nicht schaffen, nochmal ein komplett neues Projekt starten, die Thematik hier aus diesem Thema als erstes einbauen und dann meinen Code Schritt für Schritt ins neue Projekt kopieren und immer zwischendurch testen. Ist denke ich mal eine gute Methode eventuellen fehlerhaften Code im Projekt zu finden.

    Ich halte euch auf jeden Fall auf dem Laufendem.


    Lg

    svenk2 schrieb:

    und immer zwischendurch testen.
    Das ist die richtige Herangehensweise. :thumbup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!