PreviewTextInput und "Entf"-Taste

07/05/2009 - 11:48 von Wojtek Kusch | Report spam
Hallo!
ich habe eine Klasse MyTextBox (in WPF) geschrieben und möchte darin
innerhalb von PreviewTextInput den Text validieren.
In TextCompositionEventArgs steht der Text aus der TextBox, den ich ja für
die valieiderung brauche.
Wenn ich Zeichen eintippe wird TextBox_PreviewTextInput aufgerufen. Dürcke
ich aber die "Entf"-Taste, so geschieht das nicht -
nachdem Löschen eine Zeichens könnte aber der Text bereits valide sein.
"KeyUp"-Ereignis würde da sicherlich helfen, aber ich müsste die EventArgs
für PreviewTextInput
konstruieren, damit ich die gleiche Prüfungen benutzen kann... es müsste
doch anders gehen...
Danke für die Hilfe!
Wojtek

private static void TextBox_PreviewTextInput(object sender,
System.Windows.Input.TextCompositionEventArgs e) {
TextBox box = (sender as TextBox);

bool isValid = Validiere( e.Text);
e.Handled = !isValid;
if (isValid)

}
 

Lesen sie die antworten

#1 Frank Dzaebel
07/05/2009 - 20:14 | Warnen spam
Hallo Wojtek,

Wenn ich Zeichen eintippe wird TextBox_PreviewTextInput aufgerufen.
Dürcke ich aber die "Entf"-Taste, so geschieht das nicht -
[...] nachdem Löschen eine Zeichens könnte aber der Text
bereits valide sein. "KeyUp"-Ereignis würde da sicherlich
helfen, aber ich müsste die EventArgs für PreviewTextInput
konstruieren, damit ich die gleiche Prüfungen benutzen kann... es
müsste doch anders gehen...



In einem KeyUp wàre das Kind ja schon in den
Brunnen gefallen. Ins PreviewTextInput gehört
das ENTF eh nicht. Ich würde es ggf. im
PreviewKeyDown machen, wenn Du die ENTF
Taste benötigst, etwa:

protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if (e.Key == Key.Delete)
{
string wàre = Text.Substring(0, SelectionStart) +
Text.Substring(Math.Min(Text.Length, SelectionStart + 1));
if (!ValidierungOK(wàre)) {e.Handled = true; return;} // o.à.
}
base.OnPreviewKeyDown(e);
}

private bool ValidierungOK(string text)
{
return text.Contains("e"); // Beispiel
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen