2013-01-09 60 views
1

我在窗體上有很多標籤,每個標籤都用不同的參數(屬於標籤文本/名稱)調用同一個方法。這裏是代碼:c中的動態方法#

//"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]); 
    } 

我只想通過爲所有標籤定義一個方法來精確我的代碼。我該怎麼做?

回答

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]); 
    ... 
    ... 
} 
+0

是否'Label'允許命令參數您可以設置在匿名委託? –

+0

@FilipEkberg:「命令參數」?你什麼意思 ? – Tigran

+0

至少在'CommandEventArgs'上有'CommandArgument',這會導致更乾淨的代碼。雖然這可能不適用於'標籤'。 –

0

在的WinForms,你的指數設置爲標籤的標籤和每個OnClick事件設置爲相同的事件處理程序

private void lbl_Click(object sender, EventArgs e) 
{ 
     checkresult(res[Convert.ToInt32((sender as Label).Tag)]); 
} 
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]); 
    }     
} 
+0

這也是一個不錯的解決方案,但對於這個問題,這是完美的。感謝回答:) – Shaharyar

+0

我會說這是一個很好的解決方案:)意味着如果添加更多標籤,則不必編輯處理程序。 –

1

時,你的事件處理程序

label1.Click += (s,e) => {checkresult(res[0]); }; 
label2.Click += (s,e) => {checkresult(res[1]); }; 
label3.Click += (s,e) => {checkresult(res[2]); };