TextBox に文字を入力し、その内容がキーの押下に応じて変化する場合、KeyDown イベントが引き続き発生するのはなぜですか? これはこの段階で「処理」されると思っていたでしょう。
3582 次
1 に答える
4
KeyDown
イベントは、であるためbubbling event
、ケースウィンドウでその親にバブルされます。それをウィンドウにバブルさせたくない場合は、次のようにtextBoxハンドラー自体で処理済みとしてマークする必要があります-
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
一方、テキストボックスでイベントをフックしようとするとPreviewKeyDown
、次のことがわかります。ウィンドウのPreviewKeyDownEventが最初に呼び出され、後でテキストボックスのPreviewKeyDownEventが呼び出されます。その背後にある理由は、それはtunelling event
です。ルーティング戦略については、このリンクを参照してください-ルーティング戦略
Morevoerを編集
して、KeyDownイベントがtextBoxからのものかどうかを確認したい場合は、eventArgsのを確認できOriginalSource
ます-
private void Window_KeyDown(object sender, KeyEventArgs e)
{
// Check to make sure event comes from window and not from textbox.
if(e.OriginalSource is Window)
{
}
}
于 2012-09-03T14:02:25.483 に答える