2016-12-20 42 views
3

我得到了很多toolStripMenuItem的,我希望這些都做同樣的功能,但有另一個參數。這是否有可能在for-loop中編程?如何一次編程多個WindowsForms?

所以這是我得到:提前

private void toolStripMenuItem1_Click(object sender, EventArgs e) 
    { 
     myFunction(1); 
    } 

    private void toolStripMenuItem2_Click(object sender, EventArgs e) 
    { 
     myFunction(2); 
    } 

    private void toolStripMenuItem3_Click(object sender, EventArgs e) 
    { 
     myFunction(3); 
    } 

感謝

+2

你的代碼沒問題。有什麼問題?爲什麼是一個for循環? – ispiro

+0

@ispiro因爲我有很多按鈕(20),我認爲如果我在for循環中這樣做會更好一些 –

回答

4

設置爲的OnClick爲3個控制一個方法:

private void toolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    //I suppose this is MenuItem if it something else you should write correct control 

    MenuItem item = (MenuItem)sender; 
    int attributeValue = 0; 

    if(sender.ID == "toolStripMenuItem1") 
    { 
     attributeValue=1 
    } 
    else if (sender.ID == "toolStripMenuItem2") 
    { 
     attributeValue=2 
    } 
    else if(sender.ID == "toolStripMenuItem3") 
    { 
     attributeValue=3 
    } 

    myFunction(attributeValue); 
} 

如果你將有嚴格的名字你的控件:toolStripMenuItem1,toolStripMenuItem2等等。

MenuItem item = (MenuItem)sender; 
string numberID = string.Concat(item.ID.Where(x=> char.IsNumber(x))); 
myFunction(int.Parse(numberID)); 
+0

@UweKeim你真正的變量是什麼意思? – mybirthname

1

根據您的評論,您可以遍歷ToolStripMenu的子項,並在for循環中進行訂閱。喜歡的東西:

foreach(ToolStripMenuItem i in toolStripMenu1.Children) 
{ 
    i.Click += toolStripMenuItem_Click; 
} 

,然後在toolStripMenuItem_Click,具有:

if(sender as ToolStripMenuItem == toolStripMenuItem1) 
{ 
    .... 
} 
if(sender as ToolStripMenuItem == toolStripMenuItem2) 
{ 
    .... 
} 
    .... 

但可能不會在任何增益。問題是,某處您將不得不提供參數(如在您的問題代碼中)或檢查哪個項目稱爲方法,以決定要做什麼。我不是說有不能是例外。我只是找不到一個容易。