Autor |
Beitrag |
SubZero
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 15.03.13 11:17
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
      

Beiträge: 4795
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 15.03.13 12:10
Hallo SubZero
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 www.entwickler-ecke.....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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      

Beiträge: 4795
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: 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? 
_________________ Gruß
Christoph
|
|
jfheins
      
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: 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... 
Zuletzt bearbeitet von jfheins am Sa 16.03.13 20:05, insgesamt 1-mal bearbeitet
|
|
Christoph1972
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: 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?
_________________ Gruß
Christoph
|
|
DarkStaRX
      
Beiträge: 28
Erhaltene Danke: 3
|
Verfasst: 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
|
|