www.mikrocontroller.net

Forum: PC-Programmierung Variable TextBox Namen in C#.NET benutzen


Autor: Markus S. (schmidle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich arbeite momentan mit C#.NET und komme an einer Stelle nicht richtig 
weiter.
Ich habe 128 Textfelder in einer Matrix angeordnet und möchte nun 
rausfinden in welchen von diesen Textfelder etwas drin steht und in 
welchen nicht. Die Textfelder heissen TextBox1...TextBox128.
Gibt es eine Möglichkeit alle Textfelder in einer Schleife zu 
durchlaufen und den eigentlichen Namen der TextBox mit dem 
Schleifenzähler zu kombinieren?

Ich habe hier einmal kurz versucht zu zeigen, wie ich das meine.
(Daß das so nicht geht, weiß ich schon ;-))
private void button7_Click_1(object sender, System.EventArgs e)
{
  string MemoryBank = "0";
  if("User" == comboBox7.SelectedItem.ToString() )
  {
    for (int i = 1; i < 129; i++)
    {
//                                 |
//                                 |
//                                \|/  
      if(this.USERDATAFORM.textBox&i.Text != "")
      {
        // Do something
      }
    }
    MemoryBank = "U"; 
  }
}
Vielen Dank für etwaige Antworten.

Gruß
Schmidle

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verstehe ich richtig, du hast 128 Textboxen von Hand angelegt, jede ist 
in einer eigenen Instanzvariablen gespeichert und du willst nun über die 
Textboxen iterieren?

Autor: Markus S. (schmidle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja genau. Geht das?

Gruß
Schmidle

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, wenn du wirklich ganz, ganz fest willst, kannst du dir, ähnlich 
wie in deinem Pseudocode in einer Schleife die Namen der 
Instanzvariablen als String generieren und dann z.B. mit Hilfe von 
Reflection auf die Instanzvariablen zugreifen :D

Die saubere Lösung wäre, die Textboxen nicht im Designer zu generieren 
sondern zur Laufzeit zu erzeugen und ihre Referenzen in einem Array zu 
speichern...

Autor: Peter P. (bonsaibaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mach einfach
      foreach (TextBox box in this.Controls)
      {
        // do something with the textboxes        
      }

Autor: Peter P. (bonsaibaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geht so leider nicht ...

Peter P. wrote:
> mach einfach
>
>
>       foreach (TextBox box in this.Controls)
>       {
>         // do something with the textboxes
>       }
> 

sondern so:
      foreach (Control control in this.Controls)
      {
        if (control is TextBox)
          Debug.WriteLine(control.Name); // mach irgendwas damit
      }

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, ist auch hässlich sich auf den im Designer vergebenen Namen zu 
verlassen, aber gehen tuts auch. Ich würd die Dinger trotzdem dynamisch 
anlegen, 128 Textboxen zu platzieren würd mich ziemlich angurken, aber 
diese Arbeit ist anscheinend ja schon gemacht :D

Autor: Markus S. (schmidle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Juhuu, es geht. Ich habe es so gemacht wie Peter vorgeschlagen hat. Ich 
habe leider trotz googlen die Reflection-Lösung von Bartli nicht 
verstanden. Aber ich bin sicher, daß die auch funktioniert ;-)
Vielen Dank euch beiden.

Ich bin mir schon bewußt, daß das was ich hier mache nicht sehr schön 
und wohl auch nicht nachahmenswert ist. Aber im Moment ist mir das egal, 
Hauptsache es funktioniert. Das nächste mal werde ich auf jeden Fall 
alle Felder dynamisch anlegen. Das hat definitiv ein paar unschlagbare 
Vorteile.

Nochmal vielen Dank.

Gruß
Schmidle

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Sorge, die Lösung mit Reflection war weder wirklich ernst gemeint, 
noch ist sie empfehlenswert.

Für solche GUIs wie du anscheinend eines machst empfiehlt sich jedoch 
meistens wirklich ein kombinierter Ansatz: Grundgerüst für einen Dialog 
mit dem Designer anlegen und den Rest zur Laufzeit erledigen (z.B. 
OK/Cancel Buttons und ein leeres Panel mit dem Designer auf den Dialog 
klatschen und die Textboxen zur Laufzeit ins Panel schmeissen, dann 
kannst du auch eine Variable Anzahl von Textboxen ohne Probleme haben).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.