Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

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

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

Geschrieben

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

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

Geschrieben (bearbeitet)

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
Geschrieben

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.

Geschrieben

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;

}

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

Geschrieben
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)

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

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

Geschrieben

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.

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

Geschrieben

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.

Geschrieben
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^^

Geschrieben
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;

        }

    }

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

Geschrieben

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

Geschrieben

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.

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