Autor Beitrag
SubZero
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4795
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ausblenden 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;
    }
}

ausblenden 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 user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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."

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4795
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 15.03.13 13:50 
Hallo SubZero,

es fehlt ja auch noch die Abfrage, ob die Umwandlung (cast) mittels as erfolgreich war:
ausblenden C#-Quelltext
1:
2:
3:
4:
if (textBox != null)
{
    // ...
}
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

ausblenden 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 user profile iconTh69 an. Die Verwendung von OfType<> löst das eleganter.
SubZero Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Fr 15.03.13 22:55 
So geht es auch noch:
ausblenden 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

_________________
Gruß
Christoph
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Sa 16.03.13 14:33 
Vielleicht so:
ausblenden 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:


Zuletzt bearbeitet von jfheins am Sa 16.03.13 20:05, insgesamt 1-mal bearbeitet
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Sa 16.03.13 18:08 
Einen habe ich noch:

ausblenden C#-Quelltext
1:
this.Controls.OfType<Button>().ToList().ForEach(button=>button.Text  = "test1");					


Gibt es noch eine Möglichkeit?

_________________
Gruß
Christoph
DarkStaRX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28
Erhaltene Danke: 3



BeitragVerfasst: Sa 30.03.13 01:55 
ausblenden 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