2016-12-24 11 views
1

これは、ボタンを作成し、それらにイベントを添付するための私のコードです。追加の引数を持つボタンのセットのイベントハンドラをクリックします。

for (int i = 0; i < NumberOfQuestion; i++) 
    { 
       Telerik.WinControls.UI.RadButton button = new Telerik.WinControls.UI.RadButton(); 
       // radButton1 
       // 
       button.Anchor = AnchorStyles.None; 
       button.Font = new Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold); 
       button.Location = new Point(65 * i + 15, 10); 
       button.Name = "btn_cauhoi" + (i + 1); 
       button.Size = new Size(60, 35); 
       button.TabIndex = 1 + i; 
       button.Text = "Câu " + (i + 1); 

       button.Click += (sender, e) => Button_Click(sender, e, (i + 1)); 

       // 

       panel_nut_cauhoi.Controls.Add(button); 
     } 


private void Button_Click(object sender, EventArgs e, int questionIndex) 
{ 
     MessageBox.Show(questionIndex.ToString()); 
} 

それは唯一私が

誰かが、私を助けてください、すべてのボタンをクリックしたときにquestionIndex = lastIndexの+ 1を見ます!

答えて

2

イベントハンドラを追加する必要はなく、追加の引数を渡すこともできません。 - (好ま)このvoid DoSomething(int index)ようDoSomething方法であなたはクリックで実行したいロジックをカプセル化し、ボタンこれにイベントハンドラを割り当てる

オプション1:インデックスを使用するには、これらのオプションのいずれかを使用することができます方法:

var j = i + 1; 
button.Click += (obj, ea) => {DoSomething(j);}; 
//If for any reason you want to call your `Button_Click`, you can do it this way: 
//button.Click += (sender, e) => Button_Click(sender, e, (i + 1)); 

オプション2からButtonTagプロパティとしてインデックスを設定して、イベントハンドラでButtonに送信者をキャストしTagプロパティからインデックスをVHS版:

var button = (RadButton)sender; 
var index = (int) button.Tag; 

オプション3 - List<RadButton>で、リストに送信者のインデックスを見つけるイベントハンドラでストアボタン:

var button = (RadButton)sender; 
var index = list.IndexOf(button); 
+0

オプション1は、編集をチェック –

+0

機能していません。修正されました。 –

+0

もう一つの問題があります。あなたは私を助けることができます ? http://stackoverflow.com/questions/41311043/button-trigger-event-gotfocus-repeattly –

関連する問題