Entwickler-Ecke

WinForms - Erstellte Steuerelemente abrufen


0odarkio0 - Do 23.06.11 16:30
Titel: Erstellte Steuerelemente abrufen
Hallo :)
Ich hab mir ein Programm geschrieben was beim Start Steuerelemente erzeugen soll je nach Anzahl der Schulfächer die ich von unserer Schulhomepage lade. Das sieht wie folgt aus:


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:
33:
        private void Steuerelemente()
         {
             int x = 10;
             int y = 10;
             TextBox[] t1 = new TextBox[montag_faecher];
             Label[] l1 = new Label[montag_faecher];
             int j = 0;

             for (int i = 0; i < montag_faecher; i++)
             {
                 //fach label montag
                 l1[i] = new Label();
                 l1[i].Parent = this.tabPage1;
                 l1[i].Text = montag_fachname[j];
                 l1[i].Location = new Point(x, y);
                 l1[i].Size = new Size(8020);
                 //textbox montag hausaufgaben
                 t1[i] = new TextBox();
                 t1[i].Parent = this.tabPage1;
                 t1[i].Text = "OK" + i;
                 t1[i].Location = new Point(x+80, y);
                 t1[i].Size = new Size(400,20);
                 y += 21;
                 j += 3;
             }

             Button button_speichern = new Button();
             button_speichern.Parent = this.tabPage1;
             button_speichern.Location = new Point(50, t1[montag_faecher - 1].Location.Y + 25);
             button_speichern.Text = "Speichern";
             button_speichern.Size = new Size(100,40);

         }


das erstellen usw klappt auch... aber wenn ich die Steuerelemente dann Resizen lassen möchte kann ich nicht auf sie zu greifen...


C#-Quelltext
1:
2:
3:
4:
private void Form1_Resize(object sender, EventArgs e)
         {

         }


wenn ich da t1[0] <- z.B rein schreibe sagt er das t1[0] im Kontext nicht vorhanden ist.
Wenn ich sie versuche Global zu erstellen sagt er mir das ich nicht auf die Variable montag_faecher verweisen kann.

Kann mir jemand sagen wie ich die Steuerelemente erstellen kann damit ich überall Zugriff drauf hab?


Christian S. - Do 23.06.11 16:34

Hallo!

Du musst sie als Feld der Klasse deklarieren und dann in der Methode instanzieren:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
private Textbox[] t1;

/* ... */
private void Steuerelemente()
{
  t1 = new TextBox[montag_faecher];
  /* ... */
}


Wobei Du allerdings mal über die Benennung Deiner Variablen nachdenken solltest, die sollten bisschen mehr darüber aussagen, was drin steckt ;-)

Grüße,
Christian


0odarkio0 - Fr 24.06.11 10:51

Das hat geklappt danke :)

Aber jetzt habe ich noch ein Problem.
Wenn ich zu dem Array Steuerelement ein EventHandler erzeugen möchte

C#-Quelltext
1:
ofd_button[i].Click += new EventHandler(Form1_Click);                    


also ich habe eine nicht feste Anzahl von Buttons... das kommt halt immer auf die Fächer an.
Wenn ich die Buttons mit Form1_click erstellen lasse... dann bekomme ich bei jedem Button das selbe Ereignis :(
Wie kann ich es so machen das jeder Button etwas anderes ausgeben kann?

Edit:Ich hab gerade gesehen das es die frage schon in einem anderen Beitrag gibt... tut mir leid wegen der Doppelpost.. aber dort versteh ich es nicht.


Christian S. - Fr 24.06.11 11:13

Am Einfachsten dürfte sein, wenn Du Dir beim Erstellen der Textboxen in jeder TExtbox merkst, welchen Index sie im Array hat:

C#-Quelltext
1:
t1[i].Tag = i;                    


Und dann brauchst Du nur noch ein Event für alle, weil Du im Event abfragen kannst, welche Textbox es war:

C#-Quelltext
1:
2:
var t = (TextBox) sender;
var i = (int) sender.Tag;


0odarkio0 - Fr 24.06.11 13:56

nochmal danke ... das klappt nun auch =D
aber ein letztes Problem hab ich noch...
ich möchte die Daten auf ein FTP server hoch laden aber ich bekomm immer diese fehlermeldung:

C#-Quelltext
1:
Der Remoteserver hat einen Fehler zurückgegeben: (550) Datei nicht verfügbar (z.B. nicht gefunden oder kein Zugriff).                    

oder diese:

C#-Quelltext
1:
Der Remoteserver hat einen Fehler zurückgegeben: (530) Nicht angemeldet.                    


Mein Code zum upload (fehlermeldung 1):

C#-Quelltext
1:
2:
3:
4:
5:
 WebClient hl = new WebClient();
              hl.Proxy = new WebProxy();
              NetworkCredential nc = new NetworkCredential("acc""pass");
              hl.Credentials = nc;
              hl.UploadFile("ftp://neweta@neweta.ne.funpic.de/Dateien" + t1_2[0].Text, "STOR", t1_2[0].Text);


Mein Code zum upload (fehlermeldung 2):

C#-Quelltext
1:
2:
3:
4:
5:
WebClient hl = new WebClient();
             hl.Proxy = new WebProxy();
             NetworkCredential nc = new NetworkCredential("acc""pass""ftp://neweta.ne.funpic.de");
             hl.Credentials = nc;
             hl.UploadFile("ftp://neweta@neweta.ne.funpic.de/Dateien" + t1_2[0].Text, "STOR", t1_2[0].Text);


Ich hab mal ein bisschen gegooglet und hab das ganze auch mal mit WebRequest versucht.. aber da bekomme ich die selben fehler.

also das pass und der Acc sind 100%ig richtig eingegeben weil ich die daten ja vom server laden kann... da klappt die anmeldung.
Weis da jemand wo der fehler liegt?


Christian S. - Fr 24.06.11 14:25

Neue Frage, neues Thema ;-)