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

  • C#

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

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

    Hallo,

    ich habe da mal wieder eine Frage. Wie kann ich es unter C# bewerkstelligen, dass ich bei Buttonklick das Form schliessen lasse und ein zweites öffnen? Ja, ich habe gesucht und finde immer nur dieses hier, egal wo ich suche:

    Quellcode

    1. private void Button1_Click(object sender, EventArgs e)
    2. {
    3. Form f1 = new Form();
    4. this.Hide();
    5. f1.Show();
    6. }


    Dieses funktioniert soweit auch, ABER nicht so wie ich es mir gedacht habe. Das aktuelle Form wird versteckt, klar, und dann wird ein 2. Form geöffnet. Problem ist aber, dass das 2. Form eben komplett neu ist, also leer, nada, nichts. Ich möchte aber das aktuelle Form schliessen und ein 2., schon vorhandenes Form, dafür anzeigen lassen. Ich bin langsam echt am verzweifeln, weil ich mich wegen sowas und anderen Kleinigkeiten fast nur noch im Kreis drehe.

    Wäre mal wieder für Tipps/Hilfe sehr dankbar.

    Lg

    svenk2 schrieb:

    C#-Quellcode

    1. Form f1 = new Form();
    Machst Du

    C#-Quellcode

    1. MeineNeueForm f1 = new MeineNeueForm();
    Form ist die BaseClass aller Formen.
    MeineNeueForm musst Du im Designer erstellen.
    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!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Hmm, ok, danke dir erst mal. Dann werde ich wieder zu VB.NET zurück gehen müssen, da funktioniert der Formwechsel wenigstens.
    Hab das jetzt probiert, es bleibt dabei, er öffnet immer wieder ein neues, anstatt das vorhandene. Hätte ja klappen können *g

    Lg

    EDIT:

    Huch, sorry, da warste du etwas schneller. Ja, das mit dem Designer hatte ich gefunden bei meiner Suche und habs da auch eingetragen. Aber wie gesagt, es funktioniert nicht. Egal, was ich wie anstelle. Keine Ahnung warum, vielleicht bin ich einfach zu d**f dazu das zu kapieren.

    svenk2 schrieb:

    anstatt das vorhandene
    Weil Du in VB6 denkst.
    Schau mal hier rein und empfinde das nach, das geht in C# ganz genau so:
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    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!
    Vollzitat von Post#5 an dieser Stelle entfernt ~VaporiZed

    Wenn ich das jetzt richtig deute/verstehe, hab ich mir das Form mehr oder weniger umsonst mühsam erstellt, da ich es ja jetzt im Designer erstellen muss? Ich verstehe dass jetzt so, dass es hier als nichts bringt neue Forms zum Project hinzu zufügen. Ein Form erstellen, alle weiteren benötigten müssen dann über Desginer erstellt werden? Na wenn ich bis jetzt die Bedeutung von "umständlich" nicht kannte, jetzt kenn ich sie. Ich glaub ich spring ausm Fenster .... naja, entweder zurück an Reißbrett und noch von Null anfangen oder doch wieder zu VB.NET zurück.

    Aaaahhhh ;(

    Trotzdem Danke euch

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    svenk2 schrieb:

    mehr oder weniger umsonst mühsam erstellt
    Was genau hast Du denn getan?
    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!
    Öhm. Nur um alle Klarheiten zu beseitigen. Du malst Dir im Designer ganz normal wie auch in VB.NET Dein Form zusammen. Und dann rufst Du es auf. Nicht wie in Post#1, sondern wie in Post#5, Codeblock#2. Da ist nunmal nix mit MeinForm.Show und gut ist. Sondern eben eine ganze Zeile mehr, die Du aber fast so richtig in Post#1 seilber hast, nämlich die mit new. Steht alles in RfGs Post und Links drinne. So what?
    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 schrieb:

    svenk2 schrieb:

    mehr oder weniger umsonst mühsam erstellt
    Was genau hast Du denn getan?
    Ich bin dabei, mir ein Programm zu erstellen, mit dem ich wiederum ein anderes Programm auslese bzw. bestimmte Zustände auslese und mir diese ausgelesenen Zustände anzeigen lasse. Dazu zählen u.a. das aktuell gespielte Lied, in welchem Player läuft das gerade gespielte Lied oder sind bestimmte Zustände am Mischpult geschaltet!? Die ganzen Anzeigen für die einzelnen Zustände habe ich fertig platziert, ihnen die jeweiligen "Funktionen" zugewiesen usw. Funktioniert auch alles super. Und all das scheint ja nun umsonst gewesen zu sein. :(

    VaporiZed schrieb:

    Öhm. Nur um alle Klarheiten zu beseitigen. Du malst Dir im Designer ganz normal wie auch in VB.NET Dein Form zusammen. Und dann rufst Du es auf. Nicht wie in Post#1, sondern wie in Post#5, Codeblock#2. Da ist nunmal nix mit MeinForm.Show und gut ist. Sondern eben eine ganze Zeile mehr, die Du aber fast so richtig in Post#1 seilber hast, nämlich die mit new. Steht alles in RfGs Post und Links drinne. So what?


    Das mit dem Designer ist ja klar. Ich bin wie folgt vorgegangen. Neues Project gestartet, und mir das Form eben so gestaltet wie ich es haben möchte. Das ist jetzt weitestgehend fertig, noch ein paar Kleinigkeiten, die ich später noch fertig machen will/wollte. Also nächster Schritt, zu dem Project ein weiteres Form hinzugefügt. Dieses gleich so eingestellt, dass es das Startform ist und dann erst mal nur einen Button zum Test drauf. Ja und dann halt den Code auf Post #1, nur eben mit den korrekten Namen. Bei dem Button soll später bei Click noch mehr passiere, u.a. Eintragungen in die Settings, aber das ist ja kein Thema, darum hab ich das hier rausgelassen. Und naja der Rest, den hab ich ja geschrieben, dass eben nicht dass schon erstellte Form aufgerufen wird, sondern eben ein neues. Und eben an der Stelle scheine ich den Wald vor lauter Bäumen nicht zu sehen.

    Wie gesagt, ich suche ja auch die ganze Zeit und belese mich dazu, komme aber, sicher wegen eines Denkfehlers nicht weiter. Auch die Beispiele/Tipps usw. direkt von Microsoft wie der hier z.B. [url]https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.form?view=netcore-3.1[/url] bringen mich nicht ans Ziel.


    Lg
    Ich blick's gar nicht. Was ist denn da umsonst gewesen? Geht es darum, dass Du nach Programmstart Dein im Designer erstelltes Form nicht zu Gesicht bekommst oder klappt das und Du veränderst darauf Daten und wenn Du irgendwas damit machst, sind alle Daten weg? Wenn letzteres, dann bitte genau beschreiben, was Du nach Programmstart machst.
    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.
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Ich bekomme beide Forms bei Start zu Gesicht, natürlich abhängig davon welches als Startform eingestellt ist. Ich will später irgendwann das Programm als Lizenzprogramm erstellen( also wirklich irgendwann). Bisher war das Form1 (Also das, was zu 95% fertig ist) mein Startform. Jetzt habe ich ein zweites Form erstellt (muss natürlich noch fertig bearbeitet werden) und da sollen vorerst 2 Buttons drauf.

    Button 1 = Testversion (Dabei wird dann etwas in die Programmsettings geschrieben und eben dieses Form soll sich dann schliessen und das andere Form dafür "zum Vorschein" kommen)
    Button 2 = Lizenzcode usw.

    Mir geht es jetzt um Button 1 und da explizit darum, das Form mit dem "Testversion"-Button zu "schliessen/auszublenden" etc pp. und das/ein andere(s) Form sichtbar zu machen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    svenk2 schrieb:

    Wenn ich das jetzt richtig deute/verstehe, hab ich mir das Form mehr oder weniger umsonst mühsam erstellt, da ich es ja jetzt im Designer erstellen muss?
    Wie kommst Du zu dieser Aussage?
    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!
    Sorry, das war ein Missverständnis meinerseits. Du hattest ja geschrieben, dass ich das im Designer erstellen muss, dass hatte mich angesichts meiner Projektmappe etwas verwirrt. Denn da hab ich

    Form1.cs
    Form1.cs [Entwurf]
    Form1.Designer.cs

    Und eben der Designer da, ist ja nur Code. Das hatte mich etwas verwirrt.
    @svenk2 Normalerweise bekommst Du nur Form1 zu sehen, alle anderen mit Form1 verquickten Dateien werden nicht explizit angezeigt, genau so wie in VB.NET.
    Wenn Du im Projektmappenexplorer auf Form1 doppelklickst, öffnet sich die Form im Designer, dann kannst Du Deine Form gestalten, exakt genau so wie in VB.NET.
    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 wie auf dem angehängten Bild zu sehen, sieht es bei mir immer aus, natürlich nur mit den richtigen Form-Namen usw. VS Community 2019
    Und deswegen war ich etwas verwirrt, bezüglich Designer. Aber wie gesagt, das ist ja erledigt, war eben ein Missverständnis. Mein Problem ist ist das Bekannte. Mit dem Code aus Post #1 (mit den richtigen Formnamen) funktioniert es jedenfalls nicht.
    Bilder
    • Anmerkung 2020-05-14 063609.jpg

      59,07 kB, 1.019×301, 27 mal angesehen
    @svenk2 Möglicherweise verstehe ich Dein Problem nicht richtig.
    Arbeite mal diesen Thread durch, es ist egal, ob das VB oder C# ist, das funktioniert bei beiden äquivalent.
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    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!
    Ok, werde ich mir noch mal anschauen. In der Zeit hab ich das noch mal versucht einfach darzustellen.

    Blaues Form = Startform
    Rotes Form = Hauptform

    Wie man auf dem dritten Bild sieht, öffnet sich nach Klick eben nicht das rote, sondern ein neues leeres.

    Code Startform (Der vom roten ist klar, gleich, nur eben ohne den Button)
    Das this.Hide(); ist nur ausgeblendet damit man es besser sieht, was bei Buttonklick passiert.

    Quellcode

    1. ​using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Windows.Forms;
    9. namespace test2
    10. {
    11. public partial class Startform : Form
    12. {
    13. public Startform()
    14. {
    15. InitializeComponent();
    16. }
    17. private void Form1_Load(object sender, EventArgs e)
    18. {
    19. }
    20. private void BTN_Test_Click(object sender, EventArgs e)
    21. {
    22. Form Hauptform = new Form();
    23. //this.Hide();
    24. Hauptform.Show();
    25. }
    26. }
    27. }



    Das nur noch mal zur Veranschaulichung. Ich werde mir jetzt noch mal den Link von dir anschauen und Schritt für Schritt durchgehen.
    Bilder
    • sf.jpg

      44,26 kB, 1.044×599, 19 mal angesehen
    • hf.jpg

      36,46 kB, 818×492, 12 mal angesehen
    • sf2.jpg

      38,5 kB, 1.043×597, 21 mal angesehen
    mach mal das:
    Form1 Hauptform = new Form1();
    Hauptform.Show();

    weil du hast deine Form ja nicht Form genannt sondern Form1
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen