Ich habe ein fertiges Form 1, wie mach ich ein neues Form 2 was auf den ersten Form aufbaut und abhängig ist. (Auf Form2 sollen nur die Punkte angezeigt werden und die zeit vom Form1) Form1 sollte die hauptsteuerung sein zb Auf dem ersten Bildschirm anzeigen Form2 sollte nur von ein abhängigsein und auf dem 2ten Bildschirm anzeigen Ich bitte um schnelle rückmeldungen.
Windows Forms sind eigentlich ganz normale Klassen. Nur sind die Steuerelemente 'private'. Füge in deinem Ziel-Form eine Methode ein, die 'public' ist und das Ziel-Steuerelement füllt. In dem Quell-Form fügst du ein Attribut ein, dass deine Form repräsentiert. Jetzt kannst du die vorher definierte Methode in deinem Ziel-Form aufrufen. Natürlich musst du dein Ziel-Form vorher noch initialiiseren und anzeigen.
1 | public partial class Form1 : Form |
2 | { |
3 | private Form2 _form2; |
4 | |
5 | public Form1() |
6 | { |
7 | InitializeComponent(); |
8 | |
9 | this._form2 = new Form2(); |
10 | this._form2.Show(); |
11 | } |
12 | |
13 | private void button1_Click(object sender, EventArgs e) |
14 | { |
15 | this._form2.SetTextBox1(this.textBox1.Text); |
16 | } |
17 | } |
18 | |
19 | public partial class Form2 : Form |
20 | { |
21 | public Form2() |
22 | { |
23 | InitializeComponent(); |
24 | } |
25 | |
26 | public void SetTextBox1(string s) |
27 | { |
28 | this.textBox1.Text = s; |
29 | } |
30 | } |
Hast du ICQ, SKYPE oder was ähnliches.! wo ich dir es rüberschicken kann und du fügst es ein. Ich habe schon so vieles ausprobiert und bekomme immer fehler meldung wen ich etwas auf Form2 beziehen will oder ich mach es einfach falsch...
Lol da hat wohl jemand die Hausaufgaben vergessen was? das Stichwort heißt Properties. Danach einfach suchen dann wirds scho.
Ich suche seit ca. 2 wochen und das die ganzen tage :/, das was ich fand war entweder zu komplex oder funktionierte gar nicht. Mein Programm habe ich fertig Programmiert, alles ist fertig. Wollte es nur noch mit Form 2 machen, was mir aber leider nicht gelingt. From2 geht auf aber er bezieht keine Werte von Form1 ...
Legt doch bitte ein neues Projekt an und kopiere den oben gezeigten Quelltext hinein. Das Form1 hat ein Textfeld und einen Button. Das From2 hat nur ein Textfeld. Entscheidend ist die Variable _form2. Hier liegt die Referenz auf deine Form2. Über diese Variable bekommst du Zugriff auf dein Form2! Wenn du einen Fehler bekommst, ist es kein Nachteil diesen zu posten... MfG Sven
Ich danke dir für die schnelle hilfe Sven, das was du beschrieben hast geht auch einbanfrei, genau so soll das Programm auch funktionieren. Das Problem ist nur wie soll man es mit "numericUpDown1" machen ? er übernimmt einfach nicht die werte, ...
Das Steuerelement hat natürlich keine 'Text'-Eigenschaft. Die Eigenschaft in dem der richtige Wert steht ist 'Value'. Hier brauchst du im Quell-Form einen Ereignishandler auf dem Ereignis 'ValueChanged' des Steuerelements 'numericUpDown1' Das sollte dann ungefähr so aussehen:
1 | private void numericUpDown1_ValueChanged(object sender, EventArgs e) |
2 | { |
3 | this._form2.SetNumericUpDown1(this.numericUpDown1.Value); |
4 | } |
Im Ziel-Form braucht du natürlich wieder eine Funktion die den Wert setzt. Wie Sebastian richtig angemerkt hat, geht das auch mit einer Property. Wenn du so was noch nich kannst, verwende eine Funktion.
1 | public void SetNumericUpDown1(decimal i) |
2 | { |
3 | this.numericUpDown1.Value = i; |
4 | } |
Das funktioniert natürlich nur in eine Richtung (Form1 -> Form2). Für die andere Richtung würde das natürlich auch funktionieren, nur brauchst du dann mehr Code. Ich würde im Ziel-Form deswegen ein Textfeld benutzen. MfG Sven
Hier ist mein numerincUpDown1, wen ich auf dem button klicke addiert er +1 zu der numerincUpDown1 Anzeige. Durch button will ich nur die Value bestimmen was ich ja auch schon habe. private void button1_Click(object sender, EventArgs e) { //this._form2.SetTextBox1(this.textBox1.Text); if (this.numericUpDown1.Value <= 11) { this.numericUpDown1.Value += 1; } } Irg. wie klappt das wieder nicht :/, wo muss ich was einfügen ? ich bekomme immer den selben fehler . private void numericUpDown1_ValueChanged(object sender, EventArgs e) { this._form2.numericUpDown1(this.numericUpDown1.Value); } Fehler 1 Der Zugriff auf "WindowsFormsApplication1.Form2.numericUpDown1" ist aufgrund der Sicherheitsebene nicht möglich. --- Kann ich eig. auch von numericUpDown (Form1) zu weisen auf Textfeld(Form2) Wen es leichter ist dann würde ich gerne dafür den Programmier code bekommen, wen du weißt wie es geht, bin echt schon am verzweifeln.
Den Code hast du doch schon. Schau einfach in mein letztes Posting :-(. Wie ich schon weiter oben gesagt habe, kannst du nicht direkt auf ein Steuerelement von Form2 zugreifen. Mache es immer über eine Funktion oder eine Property. Kopiere doch den Code immer zuerst in das Testprojekt und versuche den Code zu verstehen, sonst wird das nichts... MfG Sven
Du sprichst die Controls von der Form2 direkt mit dem Namen an, dann kannst du dieses vom Form1 aus beeinflussen. Example: Form1 und Form2 mit jeweils einem NumericUpDown.
1 | public partial class Form1 : Form |
2 | {
|
3 | Form2 cf; |
4 | |
5 | public Form1() |
6 | {
|
7 | InitializeComponent(); |
8 | |
9 | cf = new Form2(); |
10 | cf.Show(); |
11 | }
|
12 | |
13 | private void numericUpDown1_ValueChanged(object sender, EventArgs e) |
14 | {
|
15 | cf.Controls["numericUpDown1"].Text = numericUpDown1.Value.ToString(); |
16 | }
|
17 | }
|
Das Property "Text" von Controls wird mit einem Referenzwert (String) initialisiert und stellt den Ausgabewert (Value) vom NumericUpDown auf Form2 dar.
Rocky B. schrieb: > Du sprichst die Controls von der Form2 direkt mit dem Namen an, dann > kannst du dieses vom Form1 aus beeinflussen. Da geht die Wartbarkeit aber komplett flöten. Auch wenn's funktioniert: von diesem Ansatz würde ich die Finger lassen ;-)
Heyho, also ich würde das Anzeigen durch eine "numericUpDown" auf der 2. Form ungefähr so realisieren: Form1:
1 | using System; |
2 | using System.Collections.Generic; |
3 | using System.ComponentModel; |
4 | using System.Data; |
5 | using System.Drawing; |
6 | using System.Linq; |
7 | using System.Text; |
8 | using System.Windows.Forms; |
9 | |
10 | namespace numericUpDown2Forms |
11 | {
|
12 | public partial class Form1 : Form |
13 | {
|
14 | |
15 | public delegate void NumericUpDownValueChanged_Delegate(decimal value); |
16 | public static event NumericUpDownValueChanged_Delegate NumericUpDownValueChanged; |
17 | |
18 | public Form1() |
19 | {
|
20 | InitializeComponent(); |
21 | NumericUpDownValueChanged += new NumericUpDownValueChanged_Delegate(Form1_NumericUpDownValueChanged); |
22 | }
|
23 | |
24 | void Form1_NumericUpDownValueChanged(decimal value) |
25 | {
|
26 | label1.Text = "Value: " + value; |
27 | }
|
28 | |
29 | private void numericUpDown1_ValueChanged(object sender, EventArgs e) |
30 | {
|
31 | NumericUpDownValueChanged(((NumericUpDown)sender).Value); |
32 | }
|
33 | |
34 | private void button1_Click(object sender, EventArgs e) |
35 | {
|
36 | Form2 form2 = new Form2(numericUpDown1.Value); |
37 | form2.Show(); |
38 | }
|
39 | }
|
40 | }
|
Form2:
1 | using System.Text; |
2 | using System.Windows.Forms; |
3 | |
4 | namespace numericUpDown2Forms |
5 | {
|
6 | public partial class Form2 : Form |
7 | {
|
8 | public Form2(decimal value) |
9 | {
|
10 | InitializeComponent(); |
11 | numericUpDown1.Value = value; |
12 | Form1.NumericUpDownValueChanged += new Form1.NumericUpDownValueChanged_Delegate(Form1_NumericUpDownValueChanged); |
13 | }
|
14 | |
15 | void Form1_NumericUpDownValueChanged(decimal value) |
16 | {
|
17 | numericUpDown1.Value = value; |
18 | }
|
19 | }
|
20 | }
|
Allerdings würde ich allgemein Felder, auf die auch die 2. Form zugreifen kann "public static" machen und dann wieder mit delegate/event arbeiten. z.B.:
1 | ...
|
2 | public delegate void Wert1Changed_Delegate(int value); |
3 | public static event Wert1Changed_Delegate Wert1Changed; |
4 | private static int _Wert1; |
5 | public static int Wert1 |
6 | {
|
7 | get
|
8 | {
|
9 | return _Wert1; |
10 | }
|
11 | set
|
12 | {
|
13 | _Wert1 = value; |
14 | Wert1Changed(value); |
15 | }
|
16 | }
|
17 | ...
|
Oder so ähnlich.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.