2017-09-07 5 views
0

私はC#を使用しており、チェックボックスをプログラムでWindowsフォームに追加しています。私は、作成された各チェックボックスにcheckedChangedイベントハンドラを割り当てようとしています。次のcase文でvarableチェックボックス名を使用する方法はありますか?checkedChangedイベントハンドラに変数Checkboxの名前を割り当てようとしています

CheckBox chkBox = new CheckBox(); 
chkBox.Location = new System.Drawing.Point(550, y2); 
chkBox.Name = "CheckBox" + optno.ToString(); 
chkBox.Font = new Font("Arial", 10, FontStyle.Bold); 
switch (optno) 
{ 
    case 1: 
     chkBox.Click += new System.EventHandler(this.**CheckBox1**_CheckedChanged); 
     break; 
    case 2: 
     chkBox.Click += new System.EventHandler(this.CheckBox2_CheckedChanged); 
     break; 
    case 3: 
     chkBox.Click += new System.EventHandler(this.CheckBox3_CheckedChanged); 
     break; 

長いケースのリストを避けたいです。

+0

あなたはおそらくあなたのハンドラを組み合わせる必要があります。または代理人の配列を作成します。 – SLaks

+0

ハンドラメソッドはどう違っていますか? –

+0

https://stackoverflow.com/questions/33107026/dynamic-switch-cases – Tcraft

答えて

0
CheckBox chkBox = new CheckBox(); 
chkBox.Location = new System.Drawing.Point(550, y2); 
chkBox.Name = "CheckBox" + optno.ToString(); 
chkBox.Font = new Font("Arial", 10, FontStyle.Bold); 
chkBox.Click += new System.EventHandler(this.CheckBox_CheckedChanged); 

次にハンドラは次のようになります。

private void CheckBox_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox cb = sender as CheckBox; 
    if (cb != null) 
    { 
    switch (cb.Name) 
    { 
     // a case statement for each combobox control... 
     case "ComboboxOne": 
     // call custom method for handling this checkbox's change 
     DoComboboxOneStuff(); 
     break; 
     case "ComboboxTwo": 
     // call custom method for handling this checkbox's change 
     DoComboboxTwoStuff(); 
     break; 
    } 
    } 
} 

private void DoComboboxOneStuff() 
{ // do your stuff here..} 

private void DoComboboxTwoStuff() 
{ // do your stuff here..} 
+1

'switch(cb.Name)'は、ラインの下のいくつかのリビジョンで涙が止まるように拘束されています。私は少なくとも彼らの 'Tag'プロパティまたは何かに列挙型を置くでしょう。 –

関連する問題