Geggi Geschrieben 28. März 2010 Geschrieben 28. März 2010 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 Zitieren
LadyPreis Geschrieben 29. März 2010 Geschrieben 29. März 2010 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. Zitieren
Gateway_man Geschrieben 29. März 2010 Geschrieben 29. März 2010 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. Zitieren
Geggi Geschrieben 29. März 2010 Autor Geschrieben 29. März 2010 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.. Zitieren
Gateway_man Geschrieben 29. März 2010 Geschrieben 29. März 2010 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(); Zitieren
Geggi Geschrieben 29. März 2010 Autor Geschrieben 29. März 2010 Okay =) funktioniert jetzt alles Danke Zitieren
Geggi Geschrieben 29. März 2010 Autor Geschrieben 29. März 2010 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= ""; Zitieren
lbm1305 Geschrieben 29. März 2010 Geschrieben 29. März 2010 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(); Zitieren
Geggi Geschrieben 29. März 2010 Autor Geschrieben 29. März 2010 (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 29. März 2010 von Geggi Zitieren
LadyPreis Geschrieben 29. März 2010 Geschrieben 29. März 2010 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. Zitieren
lbm1305 Geschrieben 29. März 2010 Geschrieben 29. März 2010 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; } Zitieren
Geggi Geschrieben 29. März 2010 Autor Geschrieben 29. März 2010 Mit C# bin ich anfänger jop. Machen in Schule nur Java... leider Zitieren
LadyPreis Geschrieben 29. März 2010 Geschrieben 29. März 2010 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. Zitieren
Geggi Geschrieben 29. März 2010 Autor Geschrieben 29. März 2010 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) Zitieren
lbm1305 Geschrieben 29. März 2010 Geschrieben 29. März 2010 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. Zitieren
Geggi Geschrieben 29. März 2010 Autor Geschrieben 29. März 2010 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..? Zitieren
lbm1305 Geschrieben 29. März 2010 Geschrieben 29. März 2010 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? Zitieren
Geggi Geschrieben 29. März 2010 Autor Geschrieben 29. März 2010 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. Zitieren
lbm1305 Geschrieben 29. März 2010 Geschrieben 29. März 2010 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. Zitieren
LadyPreis Geschrieben 29. März 2010 Geschrieben 29. März 2010 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. Zitieren
Geggi Geschrieben 29. März 2010 Autor Geschrieben 29. März 2010 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^^ Zitieren
lbm1305 Geschrieben 29. März 2010 Geschrieben 29. März 2010 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; } } Zitieren
Gateway_man Geschrieben 29. März 2010 Geschrieben 29. März 2010 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. Zitieren
Geggi Geschrieben 29. März 2010 Autor Geschrieben 29. März 2010 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...? Zitieren
JasonDelife Geschrieben 29. März 2010 Geschrieben 29. März 2010 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. Zitieren
Empfohlene Beiträge
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.