2016-11-17 26 views
0

Wie bekomme ich einen Text der Schaltfläche, wenn ich darauf klicke, in der Listbox ohne Ereignis für alle Schaltfläche zu definieren. Wie man es verallgemeinert.Button Click Event Generalisierung

enter image description here

+0

Sie müssen Ereignishandler für jede Schaltfläche hinzufügen. Was stimmt damit nicht? –

+0

Ich habe gerade ein paar Buttons gepostet. Dies sind etwa 52 Tasten. Glauben Sie nicht, dass es lang sein würde ... –

+0

Sie können alle Tasten auf die gleiche Weise behandeln lassen, indem Sie den Text der Taste vom Sender-Parameter abrufen. –

Antwort

2

Was Sie tun können, ist eine Schleife durch die Schaltflächen auf dem Formular programmatisch und für jeden Event-Handler hinzufügen.

Diesen in Ihrer Form Konstruktor:

foreach (var ctrl in this.Controls) 
{ 
    if (ctrl is Button) 
    { 
     ((Button) ctrl).Click += MainForm_Click; 
    } 
} 

Und hier ist Ihre Event-Handler:

void MainForm_Click(object sender, EventArgs e) 
{ 
    listBox1.Items.Add(((Button) sender).Text); 
} 

Equalsk Vorschlag ist gut: wenn Sie andere Tasten auf dem Formular, das Sie don‘ Wenn Sie Teil dieses Verhaltens sein möchten, können Sie die Schaltflächen in einem Panel oder anderen Steuerelement auf Ihrem Formular setzen. Dann würden Sie einfach die foreach in Ihrem Konstruktor dies ändern:

foreach (var ctrl in this.panel1.Controls) 
+2

OP, es könnte sich lohnen, diese Schaltflächen in eine "Panel" - oder "GroupBox" einzufügen und die untergeordneten Elemente dieses Steuerelements zu durchlaufen, so dass nur die richtigen Schaltflächen betroffen sind. So wie es aussieht, wenn Sie das übergeordnete Formular iterieren, könnten Sie andere Knöpfe haben, wo Sie diesen Handler _don't_ nicht wollen. – Equalsk

0

Im Code-behind, verwenden Sie eine for-Schleife, die die gleichen Event-Handler für alle Tasten zuweisen. Dieser Event-Handler wird als erster Parameter sender übergeben, was die Schaltfläche ist, auf die Sie geklickt haben. Tippe das auf eine Button und du kannst auf seinen Text zugreifen.

+1

Also ... im Grunde meine Antwort, aber ohne Beispiele. –

+0

@ rory.ap Also ... im Grunde Ihre Antwort, aber mit einer Erklärung. ;) – Servy

+0

@Servy - Fixed that! –

Verwandte Themen