Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

2 Forms zusammenhängen C#

Empfohlene Antworten

Veröffentlicht

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

du gibst dem Button einen Listener.

Wenn dieser aufgerufen wird, erzeugst du eine neue Instanz deines zweiten Fensters, und setzt dann die Eigenschaft "Visible" dieser Instanz auf true.

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.

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..

Vielen Dank =)

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

Das tut er, weil das höchstwarscheinlich dein Startformular ist. Und das steht und fällt mit der Applikation.

Am besten wäre es wenn du die funktion hide benutzt um es zu verstecken.


this.hide();

Okay =)

funktioniert jetzt alles :)

Danke

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= "";

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();

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

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.

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;

}

Mit C# bin ich anfänger jop.

Machen in Schule nur Java... leider

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.

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)

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.

6 oder 7?^^

1. Klasse HTL ;) (also 15)

Ja aber wie mach ich es dann wenn ich den namen will der dort eingegeben worden ist..?

6 oder 7?^^

1. Klasse HTL ;) (also 15)

War wegen der 1.Klasse :-) Ist doch das normale Einschulalter.

6 oder 7?^^

Ja aber wie mach ich es dann wenn ich den namen will der dort eingegeben worden ist..?

Die Forms sind alle offen?

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.

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.

Wenn du es als statische Variable deklariert hast, musst du den Aufruf über Klassenname.Variablenname machen.

Wenn es eine "normale" Variable ist, brauchst du in deinem 2. Fenster die Referenz auf das Objekt deines 1. Fensters.

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

Hab ich gesehen. Werd ich dann ausprobiern. Danke.

Referenz und Objekte versteh ich net sry^^

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;

        }

    }

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.

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...?

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.