Autor Beitrag
mocede
Hält's aus hier
Beiträge: 7

Windows 7
C# (VS 2010 #Express )
BeitragVerfasst: Di 30.12.14 01:23 
Hallo,

ich habe ein Problem mit einer simplen if-Anweisung, welches ich mir absolut nicht erklären kann.

Das Problem ist trivial: Wenn in eine gewisse TextBox leer ist, soll ein bestimmtes Steuerelement (in meinem Fall eine GroupBox mit edlichen weiteren TextBoxen) ausgegraut werden. Dies soll auch passieren, nachdem Text aus der TextBox wieder gelöscht wurde und die TextBox somit quasi wieder leer ist.

Gelöst habe ich das - nicht unerheblich durch Probieren - wie folgt:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
// Ausgrauen der Groupbox, wenn TextBox leer ist
private void txt_AddNew_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (String.IsNullOrEmpty(txt_AddNew_0.Text)) ;
            {
                grp_Parameter.IsEnabled = true;
            }
            if (String.IsNullOrEmpty(txt_AddNew_0.Text))
            {
                grp_Parameter.IsEnabled = false;
            }    
        }


Mir unerklärlich ist der Fakt, dass mein Vorhaben nur funktioniert, wenn hinter meiner ersten if-Anweisung ein Semikolon ";" steht. Ist dieses nicht da, wird die GroupBox nicht aktiviert, sprich sie bleibt ausgegraut, egal ob Text in der TextBox steht oder nicht.

if-Anweisung erhalten meiner Kenntnis nach hinter der Bedingung kein Semikolon, genauso wie man es bei der zweiten if-Anweisung sieht. Aus irgendeinem Grund setzt mir Visual Studio aber automatisch ein ";" und unterstreicht mir das auch noch grün. Ist das ";" nicht da, ist wie berichtet die richtige Funktionalität nicht gegeben.

Warum ist das so? Was passiert hier?

Über eine Antwort würde ich mich sehr freuen! :)
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Di 30.12.14 01:41 
Hallo,

du prüfst zwei Mal auf exakt die gleiche Bedingung. Das es mit dem Semikolon funktioniert liegt daran:
du prüfst, ob der string leer ist. Wenn dies der Fall sein sollte, wird der erste if-Block ausgeführt. Dieser if-Block besteht jetzt aber nur aus einem Semikolon!
ausblenden C#-Quelltext
1:
2:
3:
{
      grp_Parameter.IsEnabled = true;
}

Dieser Code ist kein Bestandteil des if-Blocks! D.h. er wird immer ausgeführt. Also setzt du jedes Mal, wenn die Methode aufgerufen wird, IsEnabled auf true.
Anschließend überprüfst du dann nochmal, ob die TextBox leer ist. Wenn sie leer ist, setzt du IsEnabled wieder auf false.


Richtig wäre:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
            if (String.IsNullOrEmpty(txt_AddNew_0.Text))
            {
                grp_Parameter.IsEnabled = false;
            }
            else
            {
                grp_Parameter.IsEnabled = true;
            }

Das kann man noch kürzen und sieht dann so aus:
ausblenden C#-Quelltext
1:
grp_Parameter.IsEnabled = !String.IsNullOrEmpty(txt_AddNew_0.Text);					




Achja und :welcome: hier in der EntwicklerEcke ;)

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler

Für diesen Beitrag haben gedankt: mocede
mocede Threadstarter
Hält's aus hier
Beiträge: 7

Windows 7
C# (VS 2010 #Express )
BeitragVerfasst: Di 30.12.14 02:19 
user profile iconC# hat folgendes geschrieben:
Dieser if-Block besteht jetzt aber nur aus einem Semikolon!
ausblenden C#-Quelltext
1:
2:
3:
{
      grp_Parameter.IsEnabled = true;
}

Dieser Code ist kein Bestandteil des if-Blocks!


Oh man! Das ist ja verrückt! Der Fehler war so einfach wie heimtückisch. Danke für die Erklärung! Ich glaube das passiert mir so schnell nicht nochmal! Immerhin hat mein Code auch funktioniert :D

user profile iconC# hat folgendes geschrieben:

Das kann man noch kürzen und sieht dann so aus:
ausblenden C#-Quelltext
1:
grp_Parameter.IsEnabled = !String.IsNullOrEmpty(txt_AddNew_0.Text);					


Sowas in der Art hatte ich heute auch schon mal! Keine Ahnung warum ich das wieder verworfen hatte. Jetzt habe ich es jedoch übernommen. ;) Danke dafür!


user profile iconC# hat folgendes geschrieben:
Achja und :welcome: hier in der EntwicklerEcke ;)


Ich danke herzlichst für die super freundliche und ausführliche Hilfe! Das ist nicht immer selbstverständlich ;-)