[英]KeyUp event firing from next control
我的Windows應用程序中有5個按鈕。 當我單擊箭頭鍵時,焦點將在按鈕之間切換,然后僅
KEYUP
事件觸發。 如何停止呢?
而是訂閱PreviewKeyDown
事件。
當焦點位於此控件上時,在按下鍵時在KeyDown事件之前發生。
在按鈕之間移動時, sender
參數將包含先前選擇的按鈕。
我找到了一個適合您的解決方案,從這里開始改編。 顯然,MS決定箭頭鍵不會觸發KeyDown
事件,因此您無法取消它們。
一種解決方法是,將箭頭鍵指定為普通輸入鍵,就像其他任何鍵一樣。 然后,將觸發KeyDown
事件,並且您可以根據需要取消按鈕的按下。
private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
e.IsInputKey = true;
}
private void button1_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
在評論中回答您的問題
void button1_LostFocus(object sender, EventArgs e)
{
button1.Focus();
}
為了防止Up從Button
上移動焦點,您必須至少使用3種方法:
bool _focus;
private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Up)
_focus = true;
}
private void button1_KeyUp(object sender, KeyEventArgs e)
{
_focus = false;
}
private void button1_Leave(object sender, EventArgs e)
{
if(_focus)
button1.Focus(); // or (sender as Control)
}
技巧是在用戶按下向上鍵時使用標志,並在“ Leave
返回焦點。 您必須在KeyUp
取消KeyUp
,否則將無法更改焦點(通過按Tab進入示例)。
您可以在Leave
取消標記,但我沒有對其進行測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.