2016-12-20 3 views
3

Ich habe eine Menge toolStripMenuItems, und ich möchte, dass alle die gleiche Funktion haben, aber mit einem anderen Parameter. Ist das irgendwie möglich in einer For-Schleife zu programmieren?Wie programmiert man mehrere WindowsForms gleichzeitig?

Also das ist, was ich habe:

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); 
    } 

Vielen Dank im Voraus

+2

Ihr Code ist in Ordnung. Was ist das Problem? Warum eine For-Schleife? – ispiro

+0

@ispiro Da ich eine Menge Knöpfe habe (20), dachte ich, es wäre schöner, wenn ich das in einer For-Schleife mache. –

Antwort

4

Set zu OnClick für die 3 Kontrollen nur eine Methode:

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); 
} 

Wenn Sie strenge Namen haben von Ihre Steuerelemente: toolStripMenuItem1, toolStripMenuItem2 und so weiter.

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

@UweKeim was meinst du mit echten Variablen? – mybirthname

1

Ihrem Kommentar zufolge könnten Sie über die Child-Elemente von ToolStripMenu iterieren und in einer for-Schleife abonnieren. Etwas wie:

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

und dann in toolStripMenuItem_Click haben:

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

aber es würde wahrscheinlich nicht jeder Gewinn, daß sein. Der Punkt ist, dass irgendwo Sie entweder ein Argument liefern müssen (wie im Code Ihrer Frage) oder überprüfen Sie, welches Element die Methode genannt wird, um zu entscheiden, was zu tun ist. Ich sage nicht kann nicht Ausnahmen sein. Ich finde einfach keinen leicht.

Verwandte Themen