2016-10-19 61 views
0

在C#中構建WPF應用程序我有5個複選框,當選擇一個或多個選項時,我希望動態更改it語句的參數。 例如,我有周一,週二,週三,週四&作爲複選框。 如果用戶選擇星期一,星期三,&星期五,那麼我希望if語句的參數改變以反映該情況。 我不想做許多不同的if語句。 下面是一個示例我寫的,但如果是錯誤的說法顯然C#Dynamic If arugment

string passArg = ""; 

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

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

很抱歉,如果這是一個愚蠢的問題

+1

你想一個switch語句? – Will

+0

只有5條語句就足夠了。你使用+ =運算符來建立你的字符串。像'passArg + =「Thu」'和'passArg + =「Fri」'等 –

+1

@ M.kazemAkhgary,你會怎麼減去未選中時?你不能只用' - ='「unfcatenate」字符串... – TKharaishvili

回答

0

不一樣簡單,你想。你可以動態生成代碼,但在這種情況下它是矯枉過正。所有你需要的是:

bool isChecked = false; 

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

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

我不想讓if語句許多不同。

嗯,你可以把複選框在一個循環中,設置Tag或一些其他財產和比較,對pasArg但我傾向於去與簡單解決方案,工作第一再集中使其更好。您可能會發現,當7 if陳述可以正常工作時,您會花更多時間嘗試提出巧妙的解決方案(以後可能無法理解)。

+0

但是我有5個不同的日子。用戶可以選擇任何一天的組合。這將需要我有許多不同的if語句來預測每一個組合。 –

+0

@DhavalDesai你的例子只在'passArg'中顯示一天。如果你需要比較幾天的任何組合,那麼在這種情況下顯示'passArg'是什麼。無論如何,你不應該在單獨的「if」語句中檢查「每一個組合」。 –

1

您可以爲您在列表中的值:

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

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

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

當複選框CheckedUnchecked,在這種方法中,你可以設置或取消你的東西,你可以觸發事件。
例如,在您的XAML形式:

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

,然後創建事件:

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 
}