Autor Beitrag
olliterski
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 105
Erhaltene Danke: 2

Win7 64-Bit
D7 Ent.
BeitragVerfasst: Do 27.08.15 11:09 
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:
ausblenden 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.:
ausblenden 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...
ausblenden 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?

_________________
Viele Grüße
Oliver
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.
ausblenden 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.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 27.08.15 12:36 
Hallo,

da ich jetzt nicht viel Zeit habe, hier nur ein Link aus einem anderen Forum: [FAQ] Variablennamen zur Laufzeit zusammensetzen / Dynamisches Erzeugen von Controls
avoid
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Do 27.08.15 18:24 
ich denke ich habe da etwas für dich: www.entwickler-ecke.....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.
www.entwickler-ecke....ewtopic.php?t=111035

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke