1

フォームに多くのラベルがあり、すべてのラベルが異なる引数(ラベルのテキスト/名前に属する)で同じメソッドを呼び出します。コードは次のとおりです。

    //"res" is an array
    private void label1_Click(object sender, EventArgs e)
    {                       
        checkresult(res[0]);
    }

    private void label2_Click(object sender, EventArgs e)
    {        
        checkresult(res[1]);
    }

    private void label3_Click(object sender, EventArgs e)
    {  
        checkresult(res[2]);
    }

    private void label4_Click(object sender, EventArgs e)
    { 
        checkresult(res[3]);
    }

    private void label5_Click(object sender, EventArgs e)
    {
        checkresult(res[4]);
    }

    private void label6_Click(object sender, EventArgs e)
    {
        checkresult(res[5]);
    }

    private void label7_Click(object sender, EventArgs e)
    {
        checkresult(res[6]);
    }

    private void label8_Click(object sender, EventArgs e)
    {
        checkresult(res[7]);
    }

    private void label9_Click(object sender, EventArgs e)
    {
        checkresult(res[8]);
    }

すべてのラベルに対して 1 つのメソッドのみを定義して、コードを正確にしたいだけです。どうすればできますか?

4

4 に答える 4

4

擬似コードは次のようになります。

label1.Click += label_Click(object sender, EventArgs e); 
label2.Click += label_Click(object sender, EventArgs e);//SAME HANDLER
label3.Click += label_Click(object sender, EventArgs e);//SAME HANDLER
....

以降

private void label_Click(object sender, EventArgs e)
{
    if(sender == label1)
      checkresult(res[0]);
    else if(sender == label2)
      checkresult(res[1]);
   ... 
   ...
}
于 2013-01-09T08:32:14.553 に答える
3

まず、すべてのラベルで同じLabel_Clickイベントを使用できるようにします。

private void Label_Click(object sender, EventArgs e)
{
    Label temp = sender as Label;
    if (temp != null)
    {
        string labelName = temp.Name;
        string labelId = labelName.Substring(5, labelName.Length);
        int id = int.Parse(labelId) - 1;
        checkresult(res[id]);
    }                
}
于 2013-01-09T08:35:02.267 に答える
1

イベントハンドラーを作成するときに匿名デリゲートを設定できます

label1.Click += (s,e) => {checkresult(res[0]); };
label2.Click += (s,e) => {checkresult(res[1]); };
label3.Click += (s,e) => {checkresult(res[2]); };
于 2013-01-09T08:41:41.287 に答える
0

WinForms で、インデックスをラベルのタグに設定し、各 OnClick イベントを同じ EventHandler に設定します。

 private void lbl_Click(object sender, EventArgs e)
 {
      checkresult(res[Convert.ToInt32((sender as Label).Tag)]);
 }
于 2013-01-09T08:34:51.520 に答える