Entwickler-Ecke

Basistechnologien - Controls nach einem Muster durchsuchen...


dinazavric - Do 05.05.11 13:29
Titel: Controls nach einem Muster durchsuchen...
Hallo,

ich möchte den folgenden Code in einer Schleife ausführen, so, dass man bspw. bei 10 Controls nicht für jeden das Gleiche schreiben muss:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
if ((Px_Name.SelectedItem != null) || (Px_Value.SelectedItem != null))
{
   DataRow newRow2 = dataSetPro.Tables["Parameters"].NewRow();
   newRow2["ParameterName"] = Px_Name.Text.ToString();
   newRow2["ValueDefinition"] = Px_Value.Text.ToString();
   dataSetPro.Tables["Parameters"].Rows.Add(newRow2);
}


und zwar wird statt Px eben irgendwas zwischen P1 und P10 genommen. Wie kann ich es machen?


dark-destination1988 - Do 05.05.11 13:46


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  

 for (int i=0;i<10;i++)
{

   DataRow newRow2 = dataSetPro.Tables["Parameters"].NewRow();
   newRow2["ParameterName"] = Px_Name.Text.ToString(); 
   newRow2["ValueDefinition"] = Px_Value.Text.ToString();   
   dataSetPro.Tables["Parameters"].Rows.Add(newRow2);
}

wenn dann für px jeweils etwas anderes reinkommt nehm doch einen switch


dinazavric - Do 05.05.11 14:10

user profile icondark-destination1988 hat folgendes geschrieben Zum zitierten Posting springen:
wenn dann für px jeweils etwas anderes reinkommt nehm doch einen switch


dann muss ich ja beim switch 10 mal das gleiche schreiben... ich möchte ja dass die Px_Name und Px_Value irgendwie durchlaufen, irgendwie in der Art P[i]_Name und P[i]_Value für i=1..10
Ich weis nur leider nicht wie man es richtig macht...


bakachan - Do 05.05.11 14:33

user profile icondinazavric hat folgendes geschrieben Zum zitierten Posting springen:

ich möchte ja dass die Px_Name und Px_Value irgendwie durchlaufen, irgendwie in der Art P[i]_Name und P[i]_Value für i=1..10


Du nennst deine Lösung hier quasi selbst.
Auf was kann man per Indexierung zugreifen?
Arrays, Listen oder ähnliches.

Also nicht Variablen P1_name, P2_name .. usw sondern ein array names auf das du mit dem index zugreifst.


dinazavric - Fr 06.05.11 09:55

user profile iconbakachan hat folgendes geschrieben Zum zitierten Posting springen:
Also nicht Variablen P1_name, P2_name .. usw sondern ein array names auf das du mit dem index zugreifst.


Erstens, danke für den Tipp. Ich habe gerade einen Link gefunden, wo das Thema etwas genauer erklärt wird:

http://msdn.microsoft.com/de-de/library/aa289500%28v=vs.71%29.aspx

Trotzdem verstehe ich nicht wie so ein Array erstellt wird. Unter dem oben angegebenen Link wird von Steuerelementen gesprochen, die neu erstellt werden. In meinem Fall gibt es sie schon. In den Bespielen gibt es auch eine List[Index]. Ich habe da aber leider nicht gefunden wo sie her kommt. Könnte mir jemand da etwas weiter Helfen?


Th69 - Fr 06.05.11 10:48

Wenn du schon die Steuerelemente im Designer erstellt hast, dann mußt du sie nochmal explizit auflisten:

C#-Quelltext
1:
2:
3:
4:
Control[] controls; // als Membervariable

// in Konstruktor o.ä.
controls = new Control[] { P1_name, P2_name /*, ... */ };

(je nachdem um was es sich bei den Controls handelt, so kannst du anstatt 'Control' dann auch die Spezialisierung z.B. TextBox verwenden.)

Besser wäre jedoch, wenn du auch diese Controls dynamisch im Code anlegen würdest (ich nehme mal an, diese sind nach einem math. (geordneten) Prinzip angeordnet).


dinazavric - Fr 06.05.11 12:47

Vielen Dank, jetzt habe ich es :-D:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
ComboBox[] NameControls, ValueControls;
NameControls= new ComboBox[] { P1_Name, P2_Name, P3_Name, P4_Name, P5_Name };
ValueControls= new ComboBox[] { P1_Value, P2_Value, P3_Value, P4_Value, P5_Value };

for (int i = 0; i < 5; i++)
{
   BindingSource bs = new BindingSource(); 
   bs.DataSource = this.dataSet2;
   NameControls[i].DisplayMember = "Parameters.ParameterName";
   NameControls[i].ValueMember = "Parameters.ParameterName";
   NameControls[i].DataSource = bs;
   ValueControls[i].DisplayMember = "Parameters.ParameterProperties.ValueDefinition";
   ValueControls[i].ValueMember = "Parameters.ParameterProperties.ParameterName";
   ValueControls[i].DataSource = bs;
}