WPF文本框-如何捕获和处理Backspace和Delete事件



当用户选择并删除wpf文本框中的文本时,我试图警告用户。我可以使用previewkeydown事件捕获删除事件,但它正在取消删除事件。即使你在下面的代码中按ok,删除也不会发生。我错过了什么。。。

private void TextBox_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == System.Windows.Input.Key.Delete)
{
var textbox = (TextBox)sender;
if (textbox.SelectionLength > 1)
{
var result = MessageBox.Show("Delete selected?", "MyApp", MessageBoxButton.OKCancel);
if (result == MessageBoxResult.Cancel)
{
e.Handled = true;

}
}
}
}

这似乎不是PreviewKeyDown事件处理程序的正确用法。该处理程序似乎旨在重定向非标准输入键事件以执行自定义行为。删除键不被视为非标准/特殊。

否则,您对当前代码的想法是正确的,但现在您只需要实际删除文本框中的文本。

private void TextBox_KeyDownHandler(object sender, KeyEventArgs e)
{
switch(e.KeyCode)
{
case Keys.Delete:
if (sender is TextBox tb)
{
if(tb.SelectionLength > 1 && MessageBox.Show("Delete?", "MyApp", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
tb.SelectedText = "";
}
}
e.Handled = true;
break;
}
}

最后,确保您实际订阅了处理程序

public MainWindow()
{
InitializeComponent();
MyTextBox.KeyDown += new KeyEventHandler(TextBox_KeyDownHandler);
}

最新更新