Zum Inhalt springen

2 Forms zusammenhängen C#


Geggi

Empfohlene Beiträge

Moin,

Problem: Ich weis nicht wie ich es schreiben soll das wenn ich auf den Button klicke das dann ein neues "Form" fenster auf geht.

Also.

ich hab hier mein Test Form, klick auf den button "button" , dann soll das Test Form verschwinden und ein neues Form (also dann Form2) aufscheinen..

Bitte um hilfe :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nuja warum so verwirrend?

Instanziere einfach ein objekt des typs formX und sage showDialog().

In kurzform sieht das in etwa so aus:


    new Form2().Show();

In der "langen" Version siehts dann so aus:

  Form2 frm = new Form2();

            frm.Show();

Unterschied:

Bei der oberen Ausführung Instanzierst du das form direkt ohne eine Variable zu deklarieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nuja warum so verwirrend?

Instanziere einfach ein objekt des typs formX und sage showDialog().

In kurzform sieht das in etwa so aus:


    new Form2().Show();

In der "langen" Version siehts dann so aus:

  Form2 frm = new Form2();

            frm.Show();

Unterschied:

Bei der oberen Ausführung Instanzierst du das form direkt ohne eine Variable zu deklarieren.

Vielen Dank =)

Wie Close ich jetzt das alte Fenster? Wenn ich Close (); schreibe macht er alles zu..

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nochwas...

Wenn ich in einem Form nen String angelegt habe. Wie mach ich den dann für alle Forms verwendbar?

in java ging das mit static String name= "";

Im .NET auch :-O

Was heißt aber "für alle Forms"? Eventuell sollte der String (oder auch Objekte) über den Konstruktor mitgegeben werden.

Form2 frm2 = new Form2("Hier der String");

frm.ShowDialog();

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja wenn ne neue Form anwendung mach hab ich dann Form1 Form2 Form3...usw.

Ich will das ich einen String anlege und den in jedem Form Code verwenden kann.

zum verständins...

Ich leg in Form1

String name =""

an.

Dann kann man im Form1 seinen namen eingeben und das speichern dan steh im name String "Maxmusterman";

Und dann will ich in Form3 den name ausgeben. Aber dort kennt er die variable name net

Bearbeitet von Geggi
Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Gganze lässt sich über Zugriffsmodifizierer (z.B. "public") realisieren. Ob das in deinem Fall so sinnvoll ist, lass ich jetzt einfach mal dahin gestellt.

Für mich klingt es so, als ob du gerade deine ersten Programmiererfahrungen sammelst...

Dann solltest du dich aber vielleicht auch erstmal mit dem Konzept der OOP befassen und bei den Basics anfangen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Und dann will ich in Form3 den name ausgeben. Aber dort kennt er die variable name net

Doch...man kann den Wert, wie bereits geschrieben, per Konstruktor (oder Methodensignatur) weiterreichen.


string name="Mustermann";


Form2 frm2 = new Form2(name);

frm2.Show();


// Auszug aus der Form2

public Form2(string value) : this()

{

   _value = value;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mit C# bin ich anfänger jop.

Machen in Schule nur Java... leider

Macht vom Grundprinzip her aber keinen wirklichen Unterschied. Sicher, dass du Die Prinzipien der Programmierung richtig verstanden hast? Denn eine Variable als statisch zu erklären, nur damit sie überall verfügbar ist, ist nicht immer die sinnigste Lösung.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Macht vom Grundprinzip her aber keinen wirklichen Unterschied. Sicher, dass du Die Prinzipien der Programmierung richtig verstanden hast? Denn eine Variable als statisch zu erklären, nur damit sie überall verfügbar ist, ist nicht immer die sinnigste Lösung.

Für die sachen die ich brauche schon...

Bin auch erst in der 1. Klasse. Wird schon noch mit mir ;) (hoffentlich)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bin auch erst in der 1. Klasse. Wird schon noch mit mir ;) (hoffentlich)

Hoppla...ein 6 (oder 7)-Jähriger? :-O

Im C# zu lernen, würde ich mit Consolen-Programmierung beginnen. Nur um allein schon den Umgang mit Objekte, Datentypen etc. zu lernen.

Der Unterschied zwischen Java und C# ist nicht allzu groß. Daher dürfte ein Umstieg nicht zu schwer sein.

Auf statische Variablen bzw. Objekte würde ich, wenn auch anders möglich, verzichten. Der Grund liegt darin, dass diese Variable in der ganzen Anwendung verfügbar ist. Dies ist aus sicherheitstechnischen Gesichtspunkten nicht immer erwünscht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok

Bei dem ersten Fenster kann man den namen in ne Textbox eingeben. Dann drückt man auf den Button OK. Dann ist der Name im "String name" gespeichert.

Mit dem Klick auf den OK button versteckt (hide) sich das fenster wo man den namen eingegebn hat und es öffnet sich ein neues Fenster (form) wo der Name in nem Labl stehen sollte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok

Bei dem ersten Fenster kann man den namen in ne Textbox eingeben. Dann drückt man auf den Button OK. Dann ist der Name im "String name" gespeichert.

Mit dem Klick auf den OK button versteckt (hide) sich das fenster wo man den namen eingegebn hat und es öffnet sich ein neues Fenster (form) wo der Name in nem Labl stehen sollte.

Und dieses Szenario hab ich bereits gepostet. Einzig das Hide() fehlt noch.

Link zu diesem Kommentar
Auf anderen Seiten teilen

brauchst du in deinem 2. Fenster die Referenz auf das Objekt deines 1. Fensters.

Würde ich jetzt so nicht unterschreiben. :-)

Es gäbe noch die Möglichkeit einer Art DTO (Data Transfer Object), welches die Wert hält, die in der zweiten Form benötigt werden.

Hier nochmal der Code der zweiten Form:


    public partial class Form2 : Form

    {

        readonly string _value;


        public Form2()

        {

            InitializeComponent();

            Focus();

        }


        public Form2(string value):this()

        {

            _value = value;

        }


        protected override void OnPaint( PaintEventArgs e )

        {

            base.OnPaint( e );

            label1.Text = _value;

        }

    }

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Gganze lässt sich über Zugriffsmodifizierer (z.B. "public") realisieren. Ob das in deinem Fall so sinnvoll ist, lass ich jetzt einfach mal dahin gestellt.

Für mich klingt es so, als ob du gerade deine ersten Programmiererfahrungen sammelst...

Dann solltest du dich aber vielleicht auch erstmal mit dem Konzept der OOP befassen und bei den Basics anfangen.

Kleine Korrektur:

Das ist nicht richtig. In VB.NET würde deine Realisierung funktionieren, da du generell auf jede public oder Friend deklarierte Variable/Funktion/Prozedur aus anderen Forms zugreifen kannst ohne dafür eine Klasseninstanz zu erstellen.

Jedoch must du bei C# eine Objekt erstellen (Da ein Form nichts anderes als eine Klasse ist) um auf ein Member dieser Klasse zugreifen zu können.

Wenn du dann den Wert füllst kannst du in dem Form in dem du die Variable vom Typ FormX deklariert hast auch wieder abrufen.

Aber nur in diesem Form!

Beispiel vb.net:


public class Form1

Public _name as String = Form2.name

End class

Beispiel C#:

    public partial class Form1 : Form

    {


   public int alter = Form2.alter //Das ist nicht möglich, da kein Zugriff auf die Klasse Form2 besteht (wie in VB)


public int alter()

{

Form2 frm = new Form2(); //Jetzt hat man Zugriff auf das Member alter, jedoch ist diese Variable noch leer

frm.alter = 12;  // jetzt würd diese befüllt

return frm.alter;

}


     }

Und für die Posts im nachhinein:

C# != VB.NET

Es gibt zwar viele Ähnlichkeiten, aber auch Grundlegende unterschiede.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hm, das scheint mir alles'n wenig kompliziert... Ich mein das bleibt ja nicht bei einer Variable die ich überall brauche. (sind ca 20 Variablen)

Da war das bei Java um einiges einfacher.

einfach: static String name; und zack konnte ich se in alle klassen/methoden verwenden.

gibts sowas nicht hier auch...?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Doch, static ist in C# genauso verfügbar. Aber es ist nicht im Sinne der OOP. Es quasi die Quick&Dirty-Variante.

Wenn du 20 Variablen hast, die du unter den Forms tauschen willst, dann ist wohl ein DTO gut (wurde schon genannt). Prinzipiell ist es aber so, dass bei Forms mit Dialog-Charakter (Eine Form poppt auf, man gibt was ein, sie geht weg und es geht im Hauptfenster weiter) so macht, dass die Hauptform dem Dialog alles per Konstruktor übergibt und dann per ShowDialog() angezeigt wird. Die Eingaben in TextBoxen usw. lassen sich dann abfragen, indem man in der 2. Form Properties definiert, die die nötigen Eingaben zurückgeben. DTOs sind meiner Meinung nach nur notwendig, wenn man zwei Forms auf gleichem Niveau hat. (Obwohl natürlich auch die Hauptform die Konstruktorparameter als kapselndes Objekt übergeben kann)

Auch solltest du dir mal sprechendere Namen für die Forms / Controls überlegen.

Grüße, JasonDelife.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...