ERLEDIGT
NEIN
NEIN
ANTWORTEN
14
14
ZUGRIFFE
2034
2034
EMPFEHLEN
-
Hallo
Wenn ich mich innerhalb der Definition von Form1 (der Form mit Main() ) befinde beziehe ich mich ja auf die Instanz der Form1 mit:
this.
Wenn ich jetzt von außerhalb, also z.B. einer Form2 Elemente von Form1 ansprechen will, kann ich dies innerhalb von Form2 ja nicht mit this machen, da sich dies ja auf Form2 bezieht.
Wie geht das denn aber dann ?
vielen Dank für alle Tips
-
05.02.04 20:11 #2
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Hi.
Im Konstruktor deiner Form2 übergib einen Verweis auf Form1, damit kannst dann darauf zugreifen.
Mfg,
AlexWith the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
Hallo Alexander
Könntest Du mir hierzu kurz die Syntax nennen:
wie ich die Referenz im Konstruktor übergeben muss (dürfte ja wahrscheinlich nur eine Zeile sein) und unter welchem Namen ich die Form1 dann in Form2 ansprechen kann.
Vielen herzlichen Dank
-
06.02.04 01:11 #4
Form1 form1 = new Form1();
form1.Show();
Internetseite:
http://www.texturenland.de
Blog:
http://blog.texturenland.de
Codesnippets:
.NET-Snippets
- Sollte ich bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen -
-
Hallo Counterfeit
Aber erzeuge ich damit nicht eine komplett neue Instanz von Form1 ?
Eigentlich möchte ich ja nur Zugriff auf die bereits bestehende Form1 von der (aus Form1 aus erzeugten) Form2 aus.
-
Der Konstruktor des Form2 muss in etwa so aussehen:Original geschrieben von flaavia
Könntest Du mir hierzu kurz die Syntax nennen:
wie ich die Referenz im Konstruktor übergeben muss (dürfte ja wahrscheinlich nur eine Zeile sein) und unter welchem Namen ich die Form1 dann in Form2 ansprechen kann.
In Form1 muss in der aufrufenden Methode dann der folgende Code stehen:Code :1 2 3 4 5 6
public Form2(Form1 frm) { InitializeComponent(); // Hier steht der Konstruktor-Code }
Der Konstruktor von Form2 ist nur ein simples Beispiel. Man kann ihn auch wesentlich dynamischer schreiben, so dass man beispielsweise alle Forms übergeben könnte. Muss man dann eben casten, von Form nach Form1 etc.Code :1 2
Form2 frm2 = new Form2(this); frm2.Show();
Das Leben ist sch**ße ... aber die Grafik ist geil!
-
Hallo Saber
Vielen Dank für den Tip
Ich habe statt der Form2 eine UserControl (ich habe die englische Version, ich glaube in der deutschen heißt das Windows-Steuerelement, müsste ja aber im code gleich sein) und habe Deinen Vorschlag dort mal versucht - aber eben mit UserControl anstatt Form2. in Form1:
Code :1
UserControl1 user1 = new UserControl1(this);
und im Konstruktor von UcerControl1:
Code :1 2 3 4 5 6 7 8
public UserControl1(Form1 frm) { // This call is required by the Windows.Forms Form Designer. InitializeComponent(); // TODO: Add any initialization after the InitializeComponent call }
Leider bekomme ich die Fehlermeldung in Bezug auf this:
...\Visual Studio Projects\Beispiel\Form1.cs(26): Keyword this is not available in the current context
Was habe ich denn da falsch gemacht - oder geht das bei UserControls nicht ?
PS:
ich hatte zuerst: UserControl1 user1 = new UserControl1(this);
direkt unter class stehen, bevor Form1 instanziiert war, nachdem ich user1 dort nur deklariert habe und user1 erst nach Aufruf von:
Application.Run(new Form1());
instanziert habe, scheint es zu gehen, zumindest ohne Fehlermeldung.
Vielen Dank
Geändert von flaavia (06.02.04 um 11:13 Uhr)
-
Hallo
Noch ein Problem:
Jetzt kann ich zwar von Form2 (und auch UserControlX) aus alle public properties und methods "sehen" (Intellisence zeigt diese zur Auswahl an), aber wenn ich ein DataGrid auf Form2 lege und in den Eigenschaften des Datagrids DataSource und DataMember auswählen will, ist das auf Form1 angelegte DataSet dort nicht aufgeführt - obwohl in Form2 Intellisence (wenn man schreibt: Form1. ) das Dataset mit anzeigt.
Was kann ich denn machen, daß das DataSet auf (Form 1) in den Eigenschaften eines DataGrid auf Form2 unter DataSource / DataMember mit angezeigt wird und damit direkt auswählbar wird ?
-
Du spricht das DataSet aber schon in der Form an, oder?
Code :1
Form2DataSet = Form1.Form1DataSet;
Das Leben ist sch**ße ... aber die Grafik ist geil!
-
Naja, ...
Ich war mir nicht klar, ob ich das tun muß. Unter Delphi reicht es nämlich, die Fom1 unter uses (analog using) einzubinden und dann das Dataset über Form1.Form1DataSet in Form2 direkt anzusprechen.
Aus Deiner Anwort entnehme ich, daß dies in C# nicht geht - oder?
Ich muß also auf Form2 ein Dataset Form2Dataset (vom Typ des Form1Dataset) zumindest deklarieren (instanziieren brauche ich es ja nicht explizit, wenn ich dann später Form1DataSet übergebe - oder?)
und übergebe dann
Code :1
Form2DataSet = Form1.Form1DataSet;
im Konstruktor von Form2 - oder wo macht man diese Zuweisung am besten?
Wobei - in diesem Konstruktor wird ja auch Form1 erst zugewiesen. Muß dann diese Zuweisung von Form 1 als erstes erfolgen und dann die von Form1DataSet (weil dazu muß Form1 in Form2 ja schon definiert sein)
Oder geht alles vielleicht doch noch ganz anders
-
Richtig, das geht in C#.NET nicht auf diese Art und Weise. Du kannst per using lediglich Namespaces einbinden, aber keine Klassen oder Objekte.
Außerdem gibt es nur eine Klasse für DataSets. Wenn Du ein neues DataSet erstellt stimmen die Typen auf Form1 und Form2 überein. Du musst also nicht irgendwie ein spezielles DataSet vom Typ des Form1-DataSets erstellen.
Einfach so:
Die Übergabe kannst Du über den Konstruktor machen, dann kannst Du auch eine Referenz benutzenCode :1 2 3 4 5
// In Form 1 DataSet ds = new DataSet(); // In Form 2 DataSet ds = new DataSet();
Über die Referenz (ref) arbeitest Du praktisch DIREKT mit den Daten im DataSet aus Form1. Ohne das Wörtchen "ref" würde er Dir eine lokale Kopie in Form2 erstellen.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// In Form 1 Form2 frm = new Form2(ref ds); // In Form 2 DataSet m_Ds; public Form2(ref DataSet ds) { m_Ds = ds; } private void IrgendeineMethode() { m_Ds.Tables[0] ... blablabla }
Hmm ... ich glaub ich hör jetzt auch ... ich verwirr mich ja schon selber. *fg*
Das Leben ist sch**ße ... aber die Grafik ist geil!
-
Vielen herzlichen Dank
Jetzt ist mir vieles klarer
Hmm ... ich glaub ich hör jetzt auch ... ich verwirr mich ja schon selber. *fg*
*fg*
PS:
ist das Präfix m_ eine übliche Kennzeichnung von gekapselten (privaten) Variablen in einer Klasse? Ich habe dies sonst mit m_ noch nirgends gesehen.
Wofür steht denn das m_ ?
*fg*Geändert von flaavia (10.02.04 um 09:19 Uhr)
-
11.02.04 23:42 #13
Ich denke er meint mit m (member).
Internetseite:
http://www.texturenland.de
Blog:
http://blog.texturenland.de
Codesnippets:
.NET-Snippets
- Sollte ich bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen -
-
Korrekt, das "m" steht für Membervariable ... das hab ich aus meiner C++ Zeit übernommen. Kann man machen, muss man aber nicht. Es gibt Leute die setzen vor jeden String ein "s" oder ein "str" etc. Muss jeder selber wissen wie er/sie das handhabt.
Das Leben ist sch**ße ... aber die Grafik ist geil!
-
15.06.07 10:57 #15
- Registriert seit
- Jun 2007
- Beiträge
- 7
Ähnliche Themen
-
[C++] Labels außerhalb der Form1 Klasse ändern
Von litlein im Forum .NET Windows FormsAntworten: 17Letzter Beitrag: 11.04.10, 22:55 -
Außerhalb von JFrame setCursor ansprechen?
Von flashray im Forum JavaAntworten: 3Letzter Beitrag: 18.01.06, 14:54 -
"Sub Main" wurde nicht in "LabCalculator.Form1" gefunden?
Von Christoph1972 im Forum .NET ArchivAntworten: 2Letzter Beitrag: 20.05.05, 17:31 -
Button-Instanz aus _root ansprechen
Von cargo im Forum Flash PlattformAntworten: 4Letzter Beitrag: 09.02.05, 16:06 -
Form1.RichtextBox von anderer Klasse ansprechen
Von flotschie im Forum .NET ArchivAntworten: 1Letzter Beitrag: 30.01.05, 14:04





Zitieren


Login





