2016-12-07 35 views
0

如果按鈕3被點擊,它應該執行一個單擊11個單選按鈕之一。 這個程序的工作原理,但我想知道是否有任何簡短的方式輸入這個。單擊一個隨機單選按鈕c#

我想知道,因爲如果我想用50個單選按鈕做這個例子,那麼它會是一個極長的時間。

private void button1_Click(object sender, EventArgs e) 
    { 
     Random RandomRadioButton = new Random(); 
     int Simuleer = RandomRadioButton.Next(0, 12); 

     if (Simuleer == 0) { radioButton0.PerformClick(); } 
     if (Simuleer == 1) { radioButton1.PerformClick(); } 
     if (Simuleer == 2) { radioButton2.PerformClick(); } 
     if (Simuleer == 3) { radioButton3.PerformClick(); } 
     if (Simuleer == 4) { radioButton4.PerformClick(); } 
     if (Simuleer == 5) { radioButton5.PerformClick(); } 
     if (Simuleer == 6) { radioButton6.PerformClick(); } 
     if (Simuleer == 7) { radioButton7.PerformClick(); } 
     if (Simuleer == 8) { radioButton8.PerformClick(); } 
     if (Simuleer == 9) { radioButton9.PerformClick(); } 
     if (Simuleer == 10) { radioButton10.PerformClick(); } 
     if (Simuleer == 11) { radioButton11.PerformClick(); } 
    } 
+0

這個問題更適合Code Review http://codereview.stackexchange.com/ – FCin

+0

創建一個名爲'rButtons'的名單並在其中存儲所有的單選按鈕,比如'foreach(Control rb in this.Controls){if(rb是RadioButton){rButtons.Add((RadioButton)rb);}}'或者如果你想更精明些,for循環可以像這樣'foreach(RadioButton rb在這個.Controls.OfType ()){/ *代碼* /}' –

+0

我不是'C#'傢伙,但這不是簡單地通過使用for()'循環解決? – 2016-12-07 09:55:39

回答

1

如果這是WinForms試試這個:

string name = string.Format("radioButton{0}", Simuleer); 
this.Controls/* or container that groups thease radio buttons */ 
      .OfType<RadioButton>().FirstOrDefault(ctrl => ctrl.Name == name).PerformClick(); 
+1

它應該是=> string name = string.Format(「radioButton {0}」,Simuleer); – jignesh

+1

這不起作用。你不能在'FirstOrDefault'的結果上使用'OfType <>'。您必須先應用'OfType <>'。然後你最好使用First而不是FirstOrDefault。在這種情況下,'InvalidOperationException'比後續的'NullReferenceException'要好,因爲它會說明實際的問題。 – Sefe

+1

你錯過了string.Format()的'{0}' –

0

這是有點長,但這段代碼將很容易在未來的維護。

RadioButtonListSeparate Radio buttons相比較。

 protected void Button1_Click(object sender, EventArgs e) 
     { 
      Random random = new Random(); 

      var radioButtonNumber = random.Next(RadioButtonList1.Items.Count); 

      RadioButtonList1.SelectedIndex = radioButtonNumber; 

      RadioButtonListClick(radioButtonNumber); 

     } 

     private void RadioButtonListClick(int number) 
     { 
      switch (number) 
      { 
       case 0: 
        // Call the function realted to radio button 0 in your case. 
        break; 
        . 
        . 
        . 

      } 
     } 

注:這將確保在編譯時,該代碼將無法在運行時失敗。作爲比較,以確保radiobutton ID應該是相同的,如果它沒有找到一個,那麼它會拋出運行時錯誤。