2016-09-18 16 views
-1

私は以下のコードを書いています。スイッチのステートメントで誰かが押されたときに他のすべてのボタンを無効にする方法を教えてください。私は実際にこのアプリケーションで一度だけ自分の運が分かるようにしたい。クリックイベントハンドラ以外のすべてのボタンを無効にするにはどうすればよいですか?

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

あなたはこれを達成するために次の操作を行うことができます:あなたが何をしたいか、その後

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

} 


は、最初の形式のあなたのLoadイベントで、あなたのボタンボタン名にTagプロパティを設定しますあなたのコントロールを反復して、クリックされていないものを無効にします:
ボタンがグループボックス内にないと考えられることに注意してくださいその場合、グループボックスになるコンテナを反復処理する必要があります。

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文とこのイベントハンドラからexitボタンを削除します。私は別の別のイベントハンドラを作成しました。いずれかのボタンを押したときでも終了ボタンは無効になります。私は実際にその終了ボタンを除くすべてのボタンを無効にしたかったのです。どうすればいいのか教えてください。 – mac

+0

@mac編集された答えとそれが答えとして問題のマークを解決したかどうかを見てください。 :)(あなたの終了ボタンがbtnExitという名前であると考えて) – Niklas

+0

本当に問題を解決してくれてありがとう。私はこれを答えにするつもりです。もう一度ありがとう – mac

関連する問題