Überschreiben TextChanged-Ereignis für ein benutzerdefiniertes Steuerelement funktioniert nicht
Ich habe versucht, diesen code in mein benutzerdefiniertes Benutzersteuerelement in einer C# - Windows-Anwendung:
public partial class HtextBox : DevExpress.XtraEditors.TextEdit
{
protected override void OnTextChanged(KeyEventArgs kpe)
{
if (kpe.KeyCode == Keys.D1 ||
kpe.KeyCode == Keys.D2 ||
kpe.KeyCode == Keys.D3 ||
kpe.KeyCode == Keys.D4 ||
kpe.KeyCode == Keys.D5 ||
kpe.KeyCode == Keys.D6 ||
kpe.KeyCode == Keys.D7 ||
kpe.KeyCode == Keys.D8 ||
kpe.KeyCode == Keys.D9 ||
kpe.KeyCode == Keys.D0
) {
base.Text += kpe.KeyValue;
}
}
}
Bekam ich diese Fehlermeldung:
Fehler 1 " myproject.HtextBox.OnTextChanged(object, System.Windows.Formen.KeyEventArgs)': no suitable method found to override E:\my Projekt\myproject\HtextBox.cs
Ich möchte erstellen Sie ein benutzerdefiniertes Textfeld ein. Hier möchte ich diese textbox nur zahlen als Eingabe. Was wäre ein Beispiel?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl
KeyEventArgs
ist eine Unterklasse vonSystem.EventArgs
, C# lässt nicht zu, dass Sie zum überschreiben einer Methode durch eine Unterklasse parameter. Müssen Sie überschreiben die Methode, mit der Unterschrift von der Basis-Klasse, und dann gegossen, umKeyEventArgs
innen Ihre Funktion:Edit:
Da
OnTextChanged
nichtKeyEventArgs
und es sieht aus wie Sie Sie brauchen, versuchen Sie überschreiben eine andere Methode:OnTextChanged
. Hinzufügen Sie können eine lange Ausgabe vonargs.GetType()
oder stoppen, im debugger, und sehen, was es ist?OnTextChanged
nach tun, was auch immer Sie planen zu tun! Dank zmilojko!DevExpress
, also ich habe keine Ahnung, was ist die genaue Unterklasse vonEventArgs
, dass Sie inOnTextChanged
. Können Sie setzen einen breakpoint auf dieKeyEventArgs kpe = (KeyEventArgs)args;
Linie, überprüfen Sie dieargs
variable, und nach seiner Art? Die Idee ist, den castargs
zu dieser Art stattKeyEventArgs
.KeyEventArgs
innenOnTextChanged
Methode: laut docs, diese Argumente zuOnKeyUp
undOnKeyDown
.HtextBox_KeyUp
Methode sollte diese Signatur:void HtextBox_KeyUp(object sender, KeyEventArgs kpe)
Es sieht aus wie Sie vergessen haben, den ersten parameter in Ihrer event-handler.
Ändern Sie diese:
@dasblinkenlight gegeben hat, die richtige Antwort auf Ihre Frage.
Jedoch Methode
Form.OnTextChanged
ist eine Veranstaltung, die Anhebung der Methode, und sollte kaum jemals außer Kraft gesetzt werden. Möchten Sie vielleicht, um einen Ereignishandler erstellen, eventuell in der abgeleiteten Klasse der Konstruktor:BTW, in Visual Studio, drücken Sie die tab-Taste, sobald Sie eingegeben haben
+=
würden, generieren Sie eine Ereignisprozedur für Sie.