2013-10-22 12 views
6

ich auf einem ein Button haben muß UserControl (nicht Form) in einer Windows-Anwendung zu reagieren, um die Art und Weise zu „Enter“ getroffen, einen Knopf, der als Accept Button ein Form ab Werk festgelegt .etwas benötigt Schaltfläche Akzeptieren in User Control

Ich kann nicht die Schaltfläche, um fokussiert zu sein, da ich andere Steuerelemente mit Registerkartenwechsel konzentrieren müssen.

Jede Hilfe ist wirklich zu schätzen :)

Antwort

11

Die AcceptButton eine Eigenschaft von Form und kann nicht für die Usercontrol verwendet werden. Sie können ProcessCmdKey jedoch einfach überschreiben, und das funktioniert so lange, wie das Benutzersteuerelement den Fokus hat. Andernfalls müssen Sie den AcceptButton des Formulars separat verwenden oder den ProcessCmdKey im Formular überschreiben, wenn mehrere Steuerelemente aktiv sind.

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == Keys.Enter) 
     { 
     button.PerformClick(); 
     return true; 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
+0

Während dies funktioniert, gibt es einen Nachteil bei diesem Ansatz. Nehmen wir an, ich habe ein Benutzersteuerelement, das eine Reihe von Suchkriterien-Eingabefeldern und eine "Accept" -Schaltfläche zum Starten der Suche aufweist. Wenn ich dort einige Nachschlagefelder habe und dann eine Phrase in dieses Feld eingeben muss, muss ich zuerst diesen Wert auflösen und die Suche sollte beim zweiten "Enter" ausgelöst werden (so würde das funktionieren, wenn das normal wäre) Form "mit" regulärem "AcceptButton", aber mit 'ProcessCmdKey' Ich sehe keinen vernünftigen Weg, um den Lookup-Wert zuerst aufzulösen und nur zu suchen, wenn dieser Suchparameter aufgelöst wird. – Prokurors

0

Wenn Sie die Modifier-Eigenschaft auf den Button „Public“, können Sie die Taste als AcceptButton auf dem Formular. Leider können Sie die Entwurfszeit nicht mit dem Eigenschaftenfenster von Visual Studio ausführen, aber Sie können dies im Code tun.

public Form1() 
    { 
     InitializeComponent(); 
     this.AcceptButton = userControl11.button1; 
    } 
+0

Ursprüngliches Poster hat dies explizit nach einem UserControl gefragt (** nicht Form **), die keine AcceptButton-Eigenschaft besitzt. – 0xced

Verwandte Themen