Autor Beitrag
nist123
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 11.10.12 12:50 
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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void connectToolStripMenuItem_Click(object sender, EventArgs e)
{
    Form3 formConnectionSettings = new Form3(this);
    formConnectionSettings.ShowDialog();
}

Form3:
ausblenden volle Höhe 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:
ausblenden 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 user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 11.10.12 13:42 
Hallo und :welcome:

deine Methode
ausblenden 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?
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
public ConnectionSettings ConnectionSettings
{
    get; private set;
}

// Initialisierung im Konstruktor (bei dir Form3)
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:
ausblenden 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 (gilt auch für Klassen) dazu an.

P.S. Deinen Code habe ich mittels der C#-Tags (unter Bereiche) lesbarer gemacht...
nist123 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 11.10.12 14:02 
Hallo Th69,

das mit der get und set methode hab ich genau in diesem moment auch erstellt.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
class ConnectionSettings
    {
        public int newBaudrate {get;set;}
        public string newComport {get;set;}
    }
}


ausblenden 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 :
ausblenden 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 user profile iconTh69: Quote- durch C#-Tags ersetzt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 11.10.12 14:42 
Hallo,

dir fehlt aber immer noch die ConnectionSettings-Eigenschaft in deiner FormConnectionSettings:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public partial class FormConnectionSettings : Form
{
  public FormConnectionSettings() // diese Form sollte sein Parent-Form nicht kennen (s. mein Artikel)
  {
      ConnectionSettings = new ConnectionSettings(/*baudrate1*/); // ich sehe gerade, daß hier die Übergabe von baudrate1 auch eigenartig ist, denn die Variable ist hier ja immer 0
  }

  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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 11.10.12 15:10 
hey,

habe meinen Code jetzt soweit angepasst ( Allerdings zeigt es mir in der MainForm immer noch bei
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 11.10.12 16: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
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
 void toolWindow_SelectedColorChanged(object sender, ToolWindow.ColorEventArgs e)
  {
     Color selectedColor = e.Color;

     // z.B. Hintergrundfarbe setzen
     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 ?
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 public class ColorEventArgs : EventArgs
  {
    public ColorEventArgs(Color color)
    {
      Color = color; // Eigenschaft setzen
    }

    public Color Color { get; set; } // Color als Eigenschaft definieren
nist123 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 12.10.12 10:38 
Kann mir denn neimand dabei einen tipp geben ?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 13.10.12 09: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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 15.10.12 06: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 ;)