Entwickler-Ecke
WinForms - Alle Textboxen in Anwendung auslesen und...
SubZero - Fr 15.03.13 11:17
Titel: Alle Textboxen in Anwendung auslesen und...
Hallo Leute,
ich hoffe ihr könnt mir helfen.
Ich bin relativen unwissend und neuling wenn es um Programmieren geht.
Ich will in meiner Anwendung aus allen Textboxen den beinhalteten Text auswerten und danach die Schriftfarbe darin ändern.
sozusagen....
#Alle Textboxen auswerten
# wenn "false" drin steht
#--> schriftfarbe rot
# wenn "true" drin steht
#--> schriftfarbe grün
# ansonsten
#-->schriftfarbe schwarze
Danke schonmal =)
Th69 - Fr 15.03.13 12:10
Hallo SubZero :welcome:
die Gegenfrage ist, wie hast du die TextBoxen auf der Form platziert und benannt (über den Designer oder vom Programmcode her und in einer Liste gehalten)?
Sofern alle TextBoxen direkt auf der Form platziert sind (und nicht in weiteren Controls, z.B. Panels):
unter
http://www.entwickler-ecke.de/viewtopic.php?p=660602#660602 hatte ich schonmal bei einer ähnlichen Frage die Lösung gepostet (nur daß du dann anstatt CheckBox dann TextBox nehmen müsstest).
SubZero - Fr 15.03.13 12:26
Danke für deine Antwort!
Sowas änliches hab ich schonmal gefunden, aber ich bekomm das nicht hin.
Steck da leider zu wenig in der Materie.
so ähnlich xD
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| foreach (Control control in this.Controls) { TextBox textBox = control as TextBox; if (textBox.text == "false") { textBox.ForeColor = Color.Red; } } |
Quelltext
1: 2:
| Fehler 1 "System.Windows.Forms.TextBox" enthält keine Definition für "text", und es konnte keine Erweiterungsmethode "text" gefunden werden, die ein erstes Argument vom Typ "System.Windows.Forms.TextBox" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) |
Moderiert von
Th69: C#-Tags hinzugefügt
Ralf Jansen - Fr 15.03.13 12:32
Die ganze Sprache ist Casesensitiv. Alle Eigenschaften, Methoden etc. einer Klasse werden üblicherweise groß geschrieben und so auch die Text Property.
SubZero - Fr 15.03.13 13:26
sry mein fehler^^
habs geändert und bekomm aber jetzt den Fehler
"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| foreach (Control control in this.Controls) { TextBox textBox = control as TextBox; if (textBox.Text == "false") textBox.ForeColor = Color.Red; else if (textBox.Text == "true") textBox.ForeColor = Color.Green; else textBox.ForeColor = Color.Black; } |
Th69 - Fr 15.03.13 13:50
Hallo SubZero,
es fehlt ja auch noch die Abfrage, ob die Umwandlung (cast) mittels
as erfolgreich war:
C#-Quelltext
1: 2: 3: 4:
| if (textBox != null) { } |
Ralf Jansen - Fr 15.03.13 13:51
Nicht jedes Control ist auch eine TextBox. Durch das casten der Controls augf textBox werden diejenigen zu null die keine Textboxen sind und du bekommst die von dir genannte Fehlermeldung wenn du irgendwas aufrufen willst an einem NULL Ding (z.B die Text Property).
Du must also erst Testen ob das Control auch eine TextBox war.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| foreach (Control control in this.Controls) { TextBox textBox = control as TextBox; if (textBox != null) { if (textBox.Text == "false") textBox.ForeColor = Color.Red; else if (textBox.Text == "true") textBox.ForeColor = Color.Green; else textBox.ForeColor = Color.Black; } } |
Übrigens sieh dir nochmnal das verlinkte Thema von
Th69 an. Die Verwendung von OfType<> löst das eleganter.
SubZero - Fr 15.03.13 14:16
jetz läuft der befehl durch aber er entdeckt nicht was darin steht, also das false oder true.
was hab ich denn jetzt noch falsch -.-
Ralf Jansen - Fr 15.03.13 21:21
Das sollte funktionieren. Wenn nicht wäre die Gegenfrage wo, wann und wie setzt du denn Code denn ein?
Christoph1972 - Fr 15.03.13 22:55
So geht es auch noch:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| foreach (Control c in this.Controls) { if(c.GetType() == typeof(Button)) { c.Text = "test"; } } |
Aber die Methode von Th69 ist am schönsten.
Gibt es noch weitere Möglichkeiten? :D
jfheins - Sa 16.03.13 14:33
Vielleicht so:
C#-Quelltext
1: 2:
| foreach (Button c in this.Controls.OfType<Button>()) c.Text = "test"; |
Finde ich jetzt persönlich ziemlich schick :)
Edit: Achso, das war mit "Aber die Methode von Th69 ist am schönsten." gemeint. bin dem Link nicht gefolgt... :oops:
Christoph1972 - Sa 16.03.13 18:08
Einen habe ich noch:
C#-Quelltext
1:
| this.Controls.OfType<Button>().ToList().ForEach(button=>button.Text = "test1"); |
Gibt es noch eine Möglichkeit?
DarkStaRX - Sa 30.03.13 01:55
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| foreach (Control item in Controls) { if(item is TextBox) { if(item.Text == "false") item.ForeColor = Color.Red; else item.ForeColor = Color.Green; }
} |
So müsste es auch funktionieren
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!