2016-05-21 10 views

Antwort

1

In WinForms, ein Anruf zu InitializeComponent() im Konstruktor der Klasse ist.

In diesem Verfahren (es Sie in die Formulardesigner nehmen, wenn Sie mit dem Mauszeiger über die Methode und der rechten Maustaste> goto Definition oder F12 setzen) Sie sehen, wie sich die Ereignisse nach oben sind angeschlossen:

button1_Click += button1_Click... 

Sie können das Ereignis click click einfach auf Ihre Procedure Methode abonnieren.

button1_Click += CallToProcedure; 

Wie arbeiten Sie aus, welcher Button dann geklickt hat?

private void CallToProcedure(object sender, EventArgs e) 
{ 
    Button btn = sender as Button; 
    int i = Convert.ToInt32(btn.Name.Replace("button", string.Empty)); 
    Procedure(i); 
} 
+0

Genau das, was ich suchte, danke: Sie es einfach das sender Argument in den Parameter steigen! – Jack

+1

Haben Sie meine Antwort kopiert und eingefügt? – user3185569

+0

@ user3185569 ist es extrem kindisch meine Antwort ablehnen. Das nächste Mal erklären, wie man es benutzt. Und für die Aufnahme No ist 'btn' die ungarische Standardnotation, die ich seit fast 20 Jahren verwende, und ich verlasse mich auch auf die standardmäßige Tastenbenennung und ersetze einfach" Knopf ", wenn ich mit Schaltflächengruppen arbeite. Alles andere ist auch Standard. –

0

Sie Speichern Sie den Parameter, den Sie an Ihre Schaltfläche übergeben (i in Ihrem Beispiel) in der Tag -Eigenschaft der Schaltfläche, dann verwenden Sie etwas wie folgt:

var senderButton = sender as Button; 
if (sender != null) 
{ 
    Procedure((int) senderButton.Tag); 
} 
0

Wenn Sie auf die Namensgebung verlassen können, dann einfach:

private void button_Click(object sender, EventArgs e) 
{ 
    Button btn = sender as Button; 
    int i = Convert.ToInt32(btn.Name.Replace("button", "")); 

    Procedure(i); 

} 
-1

Verwendung button.Tag Eigenschaft ist für solche Fälle entwickelt.

Lese ist doc/MSDN

Verwandte Themen