2016-09-18 52 views
-1

我寫下面的代碼。請別人告訴我,在switch語句中,當我按下其中任何一個按鈕時,我怎樣才能禁用所有其他按鈕。我實際上只希望用戶在此應用程序中瞭解他的運氣。如何禁用單擊事件處理程序中的除按鈕之外的所有按鈕?

namespace tryAppWFA 
    { 
     public partial class mainWindow : Form 
     { 
    public mainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void button_click(object sender, EventArgs e) 
    { 
     Button button=(Button)sender; 
     switch (button.Name) { 
      case "button1": 
       textBox.Text = "Hey ! you may get a car after one year"; 

       break; 
      case "button2": 
    textBox.Text = "Hey ! you may get a big super duper House after a year"; 
       break; 
      case "button3": 
       textBox.Text = "something"; 
       break; 
      case "button4": 
       textBox.Text = "something"; 
       break; 
      case "button5": 
       textBox.Text = "somehting" 
       break; 
      case "exit": 
       Environment.Exit(0); 
       break; 
      default: 
      break; 

     } 

     } 
     } 
     } 
+0

假設你知道所有的按鈕名稱,只需編寫一個方法來使用它們的名字找到控件this.Controls.Find(「contril_name」,true).FirstOrDefault()'並禁用它。 – Developer

+0

您計劃禁用所有按鈕還是僅禁用未點擊的按鈕? – Niklas

回答

0

您可以執行以下操作來實現這一點:
先設置你的按鈕Tag屬性的按鈕名稱,格式爲您加載事件:

private void MainForm_Load(object sender, EventArgs e) 
{ 
    button1.Tag = button1.Name; 
    button2.Tag = button2.Name; 
    btnExit.Tag = btnExit.Name; 
    //and so on... 

} 

那麼你想要做什麼是遍歷你的控件,並禁用那些不是單擊的:
請注意,在這裏它認爲按鈕不在groupbox中,如果這是在這種情況下,您將不得不遍歷您的容器,這將是組合框。

private void button5_Click(object sender, EventArgs e) 
{ 
    foreach (Button item in this.Controls.OfType<Control>().Where(c => c.GetType() == typeof(Button))) 
    { 
     if (item.Name == btnExit.Name) 
      continue; 
     item.Enabled = false; 
    } 
    Button button = (Button)sender; 
    switch (button.Name) 
    { 
     case "button1": 
      textBox.Text = "Hey ! you may get a car after one year"; 
      break; 
     case "button2": 
      textBox.Text = "Hey ! you may get a big super duper House after a year"; 
      break; 
     case "button3": 
      textBox.Text = "something"; 
      break; 
     case "button4": 
      textBox.Text = "something"; 
      break; 
     case "button5": 
      textBox.Text = "somehting"; 
      break; 
     default: 
      break; 
    } 
} 

編輯:我也刪除從switch語句中的退出按鈕。

+0

你的答案證明是非常有用的..我從這個switch語句和這個事件處理程序中刪除退出按鈕。我爲此創建了另一個單獨的事件處理程序但仍然退出按鈕禁用時,我按任何按鈕。我其實想禁用除退出按鈕以外的所有按鈕。所以請告訴我我該怎麼做。 – mac

+0

@mac請參閱編輯後的答案,以及是否將問題標記解答爲答案。 :)(考慮你的退出按鈕被命名爲btnExit) – Niklas

+0

謝謝它真的解決了這個問題。我打算將此標記爲答案。再次感謝 – mac

相關問題