Entwickler-Ecke
Basistechnologien - Form -> Class -> Form
nist123 - Do 11.10.12 13:50
Titel: Form -> Class -> Form
Hallo, ich habe folgendes Szenario:
Main MainForm öffnet ein Form3 in welchem der User eine Baudrate auswählen soll.
diese Baudrate soll an die Klasse ConnectionSettings übergeben werden, welche wiederrum die in einer DLL gegebene Methode SerialPortCommunication überschreibt und zwar mit der ausgewählten Baudrate.
Nun möchte ich das man mit einem GETDATA butten (in der MainForm) mit der ausgewählten Baudrate das "Connect" durchführt.
Ich hoffe man versteht mein Vorhaben :P
Nun aber etwas Code ( ps: wie mach ich es etwas "lesbarer" )
Form1:
C#-Quelltext
1: 2: 3: 4: 5:
| private void connectToolStripMenuItem_Click(object sender, EventArgs e) { Form3 formConnectionSettings = new Form3(this); formConnectionSettings.ShowDialog(); } |
Form3:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| public partial class Form3 : Form { Form1 parent; public int baudrate1;
public Form3(Form1 tmp) { InitializeComponent(); parent = tmp; Form3.ActiveForm.Activate(); }
public void ÖffneClassSettings() { ConnectionSettings settings = new ConnectionSettings(baudrate1); }
private void bu_formConnectionSettings_Connect_Click(object sender, EventArgs e) {
if (lb_form3_baudrate.SelectedItems.ToString() != null) { baudrate1 = Convert.ToInt32(lb_form3_baudrate.SelectedItems); ÖffneClassSettings();
parent.enableBuGetData(baudrate1); ActiveForm.Close();
} } } } |
Class ConnectionSettings:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| class ConnectionSettings { public int newBaudrate; public string newComport;
public ConnectionSettings(int baudrate1) { newBaudrate = baudrate1; } } |
Wie kann ich nun meine in der dll gegebene methode überschreiben und diese in der mainform verwenden ?
schonmal vielen dank für eure hilfe !
Moderiert von
Th69: C#-Tags hinzugefügt
Th69 - Do 11.10.12 14:42
Hallo und :welcome:
deine Methode
C#-Quelltext
1: 2: 3: 4:
| public void ÖffneClassSettings() { ConnectionSettings settings = new ConnectionSettings(baudrate1); } |
ergibt keinen Sinn, denn dort legst du eine lokale Variable an, welche nirgendwo benutzt wird (bzw. werden kann).
Kennst du schon Eigenschaften?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| public ConnectionSettings ConnectionSettings { get; private set; }
ConnectionSettings = new ConnectionSettings(baudrate1); |
Nun kannst du innerhalb der ConnectionSettingsForm-Klasse (bitte benenne diese auch so anstatt nur Form3) die ConnectionSettings setzen und von außerhalb (d.h. in deiner MainForm nach dem Aufruf) darauf zugreifen:
C#-Quelltext
1: 2: 3: 4:
| Form3 formConnectionSettings = new Form3(this); formConnectionSettings.ShowDialog(); ConnectionSettings settings = formConnectionSettings.ConnectionSettings; |
Sieh dir auch mal meinen Artikel
Kommunikation von 2 Forms [
http://www.bitel.net/dghm1164/programming/Kommunikation_von_2_Forms.html] (gilt auch für Klassen) dazu an.
P.S. Deinen Code habe ich mittels der C#-Tags (unter Bereiche) lesbarer gemacht...
nist123 - Do 11.10.12 15:02
Hallo Th69,
das mit der get und set methode hab ich genau in diesem moment auch erstellt.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| class ConnectionSettings { public int newBaudrate {get;set;} public string newComport {get;set;} } } |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| public partial class FormConnectionSettings : Form { Form1 parent; public int baudrate1;
public FormConnectionSettings(Form1 tmp) { InitializeComponent(); parent = tmp; FormConnectionSettings.ActiveForm.Activate(); }
private void bu_formConnectionSettings_Cancel_Click(object sender, EventArgs e) { ActiveForm.Close(); }
public void ÖffneClassSettings() { ConnectionSettings settings = new ConnectionSettings { newBaudrate = baudrate1 };
} |
wenn ich jetzt aber in meiner MainForm versuche auf meine ConnectionSettings zuzugreifen :
C#-Quelltext
1: 2: 3: 4: 5: 6:
| private void connectToolStripMenuItem_Click(object sender, EventArgs e) { FormConnectionSettings formConnectionSettings = new FormConnectionSettings(this); formConnectionSettings.ShowDialog(); ConnectionSettings settings = FormConnectionSettings.ConnectionSettings(); } |
zeigt der compiler mir folgenden fehler an:
| Zitat: |
| Error 1 'WindowsFormsApplication1.FormConnectionSettings' does not contain a definition for 'ConnectionSettings' C:\Dokumente und Einstellungen\christophkr\Desktop\c#_Projekte\OSD\OSD\Form1.cs 498 66 |
Edit: Sry fürs nochmalige falsche zitieren hab es erst dannach gemerkt mit dem [cs],...wird absofort richtig gemacht !
Moderiert von
Th69: Quote- durch C#-Tags ersetzt
Th69 - Do 11.10.12 15:42
Hallo,
dir fehlt aber immer noch die
ConnectionSettings-Eigenschaft in deiner
FormConnectionSettings:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| public partial class FormConnectionSettings : Form { public FormConnectionSettings() { ConnectionSettings = new ConnectionSettings(); }
public ConnectionSettings ConnectionSettings { get; private set; } } |
(und lösche die
ÖffneClassSettings()-Methode)
Und dann schau dir meinen Aufruf noch mal genau an...
P.S.
FormConnectionSettings.ActiveForm.Activate(); ist auch überflüssig, denn eine aktive Form nochmals zu aktivieren ergibt keinen Sinn, oder?
nist123 - Do 11.10.12 16:10
hey,
habe meinen Code jetzt soweit angepasst ( Allerdings zeigt es mir in der MainForm immer noch bei
C#-Quelltext
1: 2: 3: 4: 5: 6:
| private void connectToolStripMenuItem_Click(object sender, EventArgs e) { FormConnectionSettings formConnectionSettings = new FormConnectionSettings(this); formConnectionSettings.ShowDialog(); ConnectionSettings settings = formConnectionSettings.ConnectionSettings; } |
den Fehler
| Zitat: |
| Error 1 'WindowsFormsApplication1.FormConnectionSettings' does not contain a definition for 'ConnectionSettings' and no extension method 'ConnectionSettings' accepting a first argument of type 'WindowsFormsApplication1.FormConnectionSettings' could be found (are you missing a using directive or an assembly reference?) |
an. Dies hängt aber mit meinen falschen Referenzen zusammen wie ich denke.)
Werde mir jetzt nochmal genau die Kommunikation zwischen 2 Forms anschauen ( und dort vorallem den Punkt "1. Hauptform ruft Unterform mittels ShowDialog() auf" ?! )
Bin noch Anfänger im Programmieren, verzeih(t) mir meine dummen Fehler.
nist123 - Do 11.10.12 17:05
Hallo, entschuldigung falls ich mich dumm anstelle, aber ich komme mit der Kommunikation zwischen 2 Forms nicht zurecht.
Wie ich schon erwähnt habe soll von meiner MainForm eine weiter Form geöffnet werden, welche 2 Dinge erledigen soll:
1: Einen Button auf Form 1 Enable = true setzen.
Wenn ich das richtig verstanden habe, benötige ich hierzu in meiner Mainform eine public Methode,die auf die Eigenschaft der SubForm wie bei
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| void toolWindow_SelectedColorChanged(object sender, ToolWindow.ColorEventArgs e) { Color selectedColor = e.Color;
this.BackColor = selectedColor; } |
zugreift.
in der Submethode is mir der Teil nochnicht ganz klar. Wie müsste dieser bei mir aussehen wenn ich enable ändern will ?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| public class ColorEventArgs : EventArgs { public ColorEventArgs(Color color) { Color = color; }
public Color Color { get; set; } |
nist123 - Fr 12.10.12 11:38
Kann mir denn neimand dabei einen tipp geben ?
Th69 - Sa 13.10.12 10:17
Hallo,
hast du denn jetzt den Code soweit am Laufen, daß der Compiler-Fehler weg ist?
Und zu deinem letzten Beitrag scheint es ja so zu sein, daß ich dich wohl mit meinem Artikel eher verwirrt habe. Der gepostete Code paßt irgendwie nicht zu deiner Beschreibung.
Hier mal in Kürze die 2 verschiedenen Vorgehensweisen:
1.) Hauptform ruft Unterform auf: Methoden oder Eigenschaften verwenden
2.) Unterform will Informationen an Hauptform senden: Ereignisse (Events) verwenden
nist123 - Mo 15.10.12 07:57
Guten Morgen,
ja habe das mit dem COmpilerfehler soweit hinbekommen. An meinem anderen Problem muss ich jetzt noch ein wenig rumspielen das ich es wie gewünscht hinbekomme. Werdem mich dann gegebenenfalls wieder melden ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!