2016-10-19 3 views
0

Erstellen einer WPF-Anwendung in C# Ich habe 5 Kontrollkästchen, und wenn eine oder mehrere ausgewählt ist, möchte ich das Argument einer It-Anweisung dynamisch ändern. Zum Beispiel habe ich Mon, Di, Mi, Do & für die Checkboxen. Wenn Benutzer Mon, Mi, & Fr wählt, dann möchte ich das Argument für eine if-Anweisung ändern, um das zu reflektieren. Ich möchte nicht viele verschiedene if-Aussagen machen. Hier ein Beispiel schrieb ich, aber die if-Anweisung falsch ist offensichtlichC# Dynamisch Wenn rudimentär

string passArg = ""; 

     if(check_mon.IsChecked == true) 
     { 
      passArg = "passArg == \"Mon\""; 
     } 

     if(passArg) 
     { 
      MessageBox.Show("RAN"); 
     } 

Sorry, wenn dies eine dumme Frage ist

+1

Wollen Sie eine switch-Anweisung? – Will

+0

Nur 5 if-Anweisung ist genug. Sie bauen Ihre Zeichenfolge mit dem Operator + = auf. Wie 'passArg + =" Do "' und 'passArg + =" Fr "' etc –

+1

@ M.kazemAkhgary und wie würden Sie subtrahieren, wenn nicht aktiviert? Sie können nicht einfach '- =' "nicht verketten" Zeichenfolgen ... – TKharaishvili

Antwort

0

Nicht so einfach, wie Sie möchten. Sie können Code dynamisch generieren, aber es ist in diesem Fall Overkill. Sie brauchen, ist:

bool isChecked = false; 

if(check_mon.IsChecked && passArg == "Mon") 
{ 
    isChecked = true; 
} 
... 

if(isChecked) 
{ 
    MessageBox.Show("RAN"); 
} 

Ich will nicht eine Vielzahl verschiedener, wenn Aussagen machen.

Nun, Sie könnten die Kontrollkästchen in einer Schleife setzen, stellen Sie den Tag oder eine andere Eigenschaft und vergleichen Sie, dass gegen pasArg aber ich neigen dazu, mit der einfachsten Lösung zu gehen, die arbeitet zuerst, dann konzentrieren sich auf macht es besser. Sie werden feststellen, dass Sie mehr Zeit damit verbringen, eine clevere Lösung zu finden (die Sie vielleicht später nicht verstehen), wenn 7 if Anweisungen gut funktionieren würden.

+0

Aber ich habe 5 verschiedene Tage. Ein Benutzer könnte eine beliebige Kombination von Tagen auswählen. Dies würde erfordern, dass ich zahlreiche verschiedene if-Anweisungen habe, um jede einzelne Kombination vorherzusagen. –

+0

@DhavalDesai Ihr Beispiel zeigt nur einen Tag in 'passArg'. Wenn Sie mit einer Kombination von Tagen vergleichen müssen, dann zeigen Sie, was 'passArg' in diesem Fall wäre. In jedem Fall sollten Sie nicht in jeder "if" -Anweisung nach "jeder einzelnen Kombination" suchen müssen. –

1

Sie können in einer Liste auf einen Wert geprüft:

List<string> checked = new List<string>() 

if (check_mon.IsChecked) 
{ 
    checked.Add("Mon"); 
} 

if (checked.Contains(passArg)) 
{ 
    MessageBox.Show("RAN"); 
} 
2

Sie können ein Ereignis ausgelöst, wenn das Kontrollkästchen Checked oder Unchecked ist und in dieser Methode können Sie Ihre Sachen scharf oder unscharf geschaltet.
Zum Beispiel in XAML Form:

<CheckBox Checked="Checked" Unchecked="UnChecked"/> 

Und dann die Ereignisse erstellen:

private void UnChecked(object sender, RoutedEventArgs e) { 
    //Checked, enable, disable or do whatever you want 
} 
private void Checked(object sender, RoutedEventArgs e) { 
    //Checked, enable, disable or do whatever you want 
}