Ich habe ein USerControll, in dem ich eine Textbox habe. Ich benutze den usercontrol in meiner Form, ich möchte etwas tun, wenn jemand auf die Textbox drückt. wie kann ich es tun? Wenn Sie mir sagen, wie man ein Ereignis manuell aufruft, kann ich usercontrol.keydown in textbox.keydown aufrufen.
Erstens können Ereignisse nur aus Code innerhalb des Steuerelements ausgelöst werden, das das Ereignis deklariert. Daher muss Ihr Benutzersteuerelement das benutzerdefinierte Ereignis KeyDown deklarieren, um es zu erhöhen. Sie können KeyDown beispielsweise nicht für eine TextBox auslösen, die von Ihrem Benutzersteuerelement enthalten ist. Sie können jedoch Ihr eigenes KeyDown deklarieren und einen Handler an den KeyDown der TextBox anhängen, der Ihr eigenes KeyDown aufbaut.
Angesichts dieser Einschränkung ist das Hochziehen eines Ereignisses einfach:
%Vor%Das Anheben eines Ereignisses ähnelt einer Methode, weil Sie das im Wesentlichen tun; Sie rufen einen oder mehrere Methodendelegaten auf, die dem MultiCast-Delegaten hinter den Kulissen Ihres Ereignisses zugewiesen sind. Stellen Sie sich vor, Sie würden einem gewöhnlichen benannten Delegaten eine Methode zuweisen (wie wenn Sie das Schlüsselwort "event" aus der Definition weggelassen hätten) und es aus Ihrem Code heraus aufrufen würden. Der einzige Unterschied zwischen einem wahren Ereignis und dem ist, dass ein Ereignis mehr als einen zugeordneten Handler-Delegaten haben kann und alle aufruft, wenn es ausgelöst wird.
Normalerweise wird die Ereignisaufrufung in eine Methode mit dem Namen "On [EventName]" eingebettet, die validiert, dass das delgate über ein oder mehrere Ziele verfügt (Ereignis ist nicht null) und es dann mit dem Absender und allen anwendbaren Argumenten aufruft ... so etwas ist das typische Muster:
%Vor%Alles, was dieses Ereignis auslösen muss, ruft diese Methode auf (vorausgesetzt, es ist zugänglich).
Wenn Sie das Ereignis einfach weiterleiten möchten, können Sie als Benutzersteuerelement wahrscheinlich einfach die Basismethode "On [Event]" aufrufen, die wahrscheinlich verfügbar ist. Sie können auch die Ereignisbehandlungsroutinen verbinden, um das Ereignis direkt von einem untergeordneten Steuerelement als das Ereignis des übergeordneten Steuerelements zu übergeben ..., sodass txtFoo.KeyPress einfach die OnKeyPress-Methode des übergeordneten Steuerelements aufruft.
Was Sie beschreiben, wird Event-Bubbling genannt. Hier ist ein Beispiel:
%Vor% %Vor% %Vor% %Vor%Wenn Sie WPF verwenden, können Sie möglicherweise RaiseEvent verwenden: Ссылка
Aber das ist falsch für das, was Sie tun möchten.
Sie sollten das Ereignis sprudeln lassen.
%Vor%Dann hören Sie sich KeyDown von Ihrem Formular an. Bitte entschuldigen Sie Fehler bei der Benennung der verschiedenen Elemente / Ereignisse.
Tags und Links c# visual-studio-2010 winforms