Entwickler-Ecke
Basistechnologien - Controls in der Oberfläche zur Laufzeit identifizieren
olliterski - Do 27.08.15 11:09
Titel: Controls in der Oberfläche zur Laufzeit identifizieren
Hallo,
ist es möglich unter c# Controls in der Oberfläche zu identifizieren um sie gezielt verändern zu können?
Beispiel:
Ich habe 10 Textboxen in der Form die händisch mit Werten gefüllt werden.
Eine Routine soll die Werte prüfen.
Bei 10 Textboxen könnte man ja noch schreiben:
C#-Quelltext
1: 2: 3: 4: 5:
| check_wert(TextBox1.Text); check_wert(TextBox2.Text); check_wert(TextBox3.Text); check_wert(TextBox4.Text); check_wert(TextBox5.Text); |
usw.
Was machen ich wenn ich 20, 50 oder vielleicht 100 habe?
Da wäre eventuell eine Schleife sinnvoll - z.B.:
Quelltext
1: 2: 3: 4: 5:
| // Pseudo-Code For i:= 1 to 10 do begin check_wert(TxtBxName.Text); end |
Nun sind aber nicht alle Controls in der Oberfläche gleichen Typs und man muss sie erst mal finden und identifizieren.
Ich habe schon mit Controls.Contains() und Form.Contains() versucht an die Controls ranzukommen.
Das hier...
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| ListBox lb_l = new ListBox(); lb_l.Name = "lb1"; if (this.Contains(lb_l)) { MessageBox.Show("Es gibt sie tatsächlich!"); } else { MessageBox.Show("Es gibt sie leider nicht!"); } |
...bringt es jedenfalls nicht! Code funktioniert zwar, aber es kommt immer "Es gibt sie leider nicht!" - obwohl diese Listbox mit Namen "lb1" existiert!
Ich kann mich noch erinnern, dass es unter Delphi mal eine Möglichkeit gab, so was zu realisieren.
Nur wie sieht die Umsetzung in c# aus - jemand eine Idee?
Ralf Jansen - Do 27.08.15 12:35
Zitat: |
Was machen ich wenn ich 20, 50 oder vielleicht 100 habe? |
Primär nochmal über das UI Design nachdenken ob das nicht zu komplex ist (ich meine hier für den Anwender nicht den Programmierer)?
Wenn auf alle TextBoxen die gleiche Prüfung haben darüber nachdenken von TextBox eine eigene TextBox abzuleiten die diese Prüfung automatisch mitbringt.
Zitat: |
Ich habe schon mit Controls.Contains() und Form.Contains() versucht an die Controls ranzukommen. |
Aber die ListBox nicht der Controls Collection hinzugefügt (
this.Controls.Add(lb_l)). Du kannst nur Controls in der Controls Collection finden die da auch drin stecken. Nebenbei die die du da erzeugst würde auch nicht angezeigt werden. Nur Dinge in der Controls Collection werden auch angezeigt.
Wenn du Controls über Ihren Namen finden willst dann hilft die
this.Controls.Find Methode. Die macht das im Zweifel auch rekursiv.
Wenn du einfach alle TextBoxen prüfen will kannst du einfach alle TextBoxen aus der Controls Collection holen (mit
this.Controls.OfType<>) und die Methode drauf ausführen.
C#-Quelltext
1:
| bool allOK= this.Controls.OfType<TextBox>().All(txtBox => check_wert(txtBox.Text)); |
Ich habe hier mal angenommen das check_wert einen bool als return liefert.
avoid - Do 27.08.15 18:24
ich denke ich habe da etwas für dich:
http://www.entwickler-ecke.de/viewtopic.php?p=672801#672801
dort suche ich alle Picture Boxen die "new_" im Namen haben zusammen um damit zu arbeiten.
evtl. hilft es dir.
---nachtrag---
oh, Ralf hat dir ja schon ein ähnliches Beispiel gegeben.
damals hat mir Ralf das auch gezeigt. :)
mein Beispiel zeigt dir auch wie man damit Arbeitet.
ob du jetzt das Array mit den benötigten Controls durch gehst um die Controls in eine Grafik zu zeichnen oder ob du deren Eigenschaften Prüfst z. b. auf Gültigen Inhalt ist dann nur noch Nebensache.
äää hier hatte ich auch noch mal sowas benutzt.
http://www.entwickler-ecke.de/viewtopic.php?t=111035
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!