2016-09-18 53 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

相关问题