回答
改爲訂閱PreviewKeyDown
事件。
在焦點位於此控件上時按下鍵時發生在KeyDown事件之前。
當您在按鈕中移動時,參數sender
將包含先前選擇的按鈕。
我發現一個解決方案,應該爲你工作,從here改編。顯然,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;
}
您可能需要閱讀that post其他答案和評論,看看會有什麼工作最好在您的情況。
你能告訴我應該在PreviewKeyDown中做什麼來停止焦點移動到下一個控件? –
我想我明白你現在想要做什麼。我編輯了我的答案。 –
是的,這是我需要的。但是我在發佈之前找到了這個。無論如何很好顯示答案。 –
答案在評論你的問題
void button1_LostFocus(object sender, EventArgs e)
{
button1.Focus();
}
它每次只聚焦button1。其實我想把焦點放在按下箭頭鍵的按鈕上。 –
爲了防止最多從一個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
,否則將無法更改焦點(例如按標籤爲例)。
你可以在Leave
中取消標記,我沒有測試它。
- 1. 在jQuery中觸發一個keyup事件
- 2. JQuery keyup事件不觸發
- 3. 觸發KeyUp事件在Javascript
- 4. KEYUP事件觸發自動
- 5. 觸發另一個控件的事件
- 6. 兩個觸發到一個功能? [KEYUP和事件的內容]
- 7. jquery .keyup事件輸入不被觸發
- 8. KeyUp事件不是用ScrollViewer觸發的
- 9. Opera沒有觸發keyup和keydown事件
- 10. 防止觸發事件從另一個精靈下觸發
- 11. 如何觸發一個keyup事件並傳遞密鑰?
- 12. C# - 推輸入MessageBox的觸發控制KeyUp事件
- 13. Keyup事件觸發,更改事件不是
- 14. 觸發一個事件與多個控件的一個子
- 15. 從一個事件觸發另一個事件
- 16. 觸發事件與發件人從下標事件或這?
- 17. 觸發事件從另一個線程
- 18. jquery觸發一個事件
- 19. Angular 2.沒有從輸入中觸發Keyup事件
- 20. Rails - 從控制器觸發JavaScript事件
- 21. 如何確定哪個控件觸發了一個事件?
- 22. Silverlight觸發一個事件,然後再觸發另一個事件
- 23. 試圖觸發一個ASP.NET自定義控件按鈕事件
- 24. 另一個WPF控件事件的觸發屬性
- 25. vb.net keyup事件
- 26. 爲一個keyPress事件觸發一個事件
- 27. ReportViewer控件滾動事件未觸發
- 28. IntegerUpDown觸發父控件SelectionChanged事件
- 29. .Net用戶控件未觸發事件
- 30. HTML控件的事件不會觸發?
你想停止發射'KeyUp'事件嗎?或者你想要一些其他事件,比如'KeyDown'也可以開火嗎? –
我想要從按下箭頭鍵時有焦點的確切按鈕觸發KeyUp事件。 –
這是默認行爲。當你按下箭頭鍵時,焦點將變爲下一個控制,然後你釋放鍵,所以你從下一個按鈕中獲得了'KeyUp'事件。如果長時間不釋放按鍵,它將繼續將焦點從一個控件轉換到另一個控件,當您釋放按鍵時,您將從焦點控制中獲得「KeyUp」事件。 – Sameer