我試圖在用戶選擇和洗掉 wpf 文本框中的文本時警告用戶。我可以使用 previewkeydown 事件捕獲洗掉事件,但它正在取消洗掉事件。即使您在下面的代碼中按確定 - 也不會發生洗掉。我錯過了一些東西......
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;
}
}
}
}
uj5u.com熱心網友回復:
這似乎不是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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/439564.html
