在winform中捕獲上下左右鍵等控制鍵的按鍵事件
最近一直在做表單設計器,今天有一個需求就是:通過上下左右鍵來控制表單上的控制元件移動。
但是控制元件的KeyDown捕獲不到上下左右鍵,KeyUp事件倒是可以捕獲到,但你通過上下左右鍵移動控制元件位置,不能點一下才移動一下啊,太不人性了。上網找了半天發現了這麼一個方法:
於是還要尋找新的解決方案,但是發現了PreviewKeyDown事件,在表單設計器中,它可以獲取到上下左右鍵,問題解決。
關於PreviewKeyDown部分內容可以參考:點選開啟連結
但是控制元件的KeyDown捕獲不到上下左右鍵,KeyUp事件倒是可以捕獲到,但你通過上下左右鍵移動控制元件位置,不能點一下才移動一下啊,太不人性了。上網找了半天發現了這麼一個方法:
重寫Control的ProcessDialogKey方法,此處以winform表單為例:
protected override bool ProcessDialogKey(Keys keyData)
{
Control control = this.GetFocusedControl();
this.MoveControlByKeys(keyData, control);
return base.ProcessDialogKey(keyData);
}
/// <summary>
/// 根據keyData的值移動控制元件control
/// </summary>
/// <param name="keyData"></param>
/// <param name="control"></param>
private void MoveControlByKeys(Keys keyData, Control control)
{
if (keyData == Keys.Left)
{
if (control.Location.X > 0)
{
control.Location = new Point(control.Location.X - 1, control.Location.Y);
}
}
else if (keyData == Keys.Right)
{
control.Location = new Point(control.Location.X + 1, control.Location.Y);
}
else if (keyData == Keys.Up)
{
if (control.Location.Y > 0)
{
control.Location = new Point(control.Location.X, control.Location.Y - 1);
}
}
else if (keyData == Keys.Down)
{
control.Location = new Point(control.Location.X, control.Location.Y + 1);
}
}
//API宣告:獲取當前焦點控制元件控制程式碼
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
internal static extern IntPtr GetFocus();
///獲取 當前擁有焦點的控制元件
private Control GetFocusedControl()
{
Control focusedControl = null;
// To get hold of the focused control:
IntPtr focusedHandle = GetFocus();
if (focusedHandle != IntPtr.Zero)
//focusedControl = Control.FromHandle(focusedHandle);
focusedControl = Control.FromChildHandle(focusedHandle);
return focusedControl;
}
在表單設計器中這個方法不起作用,不清楚為什麼於是還要尋找新的解決方案,但是發現了PreviewKeyDown事件,在表單設計器中,它可以獲取到上下左右鍵,問題解決。
關於PreviewKeyDown部分內容可以參考:點選開啟連結
相關文章
- js捕獲鍵盤按鍵程式碼例項JS
- android 獲得後退鍵按事件Android事件
- js獲取鍵盤按鍵的碼值JS
- java中如何捕獲鍵盤訊息Java
- js中獲取鍵盤事件JS事件
- 利用鍵盤鉤子在Windows平臺下捕獲鍵盤動作 (轉)Windows
- ASP.NET中鍵盤上下左右鍵控制DataGrid的項選擇和分頁 - [轉載]ASP.NET
- J2ME開發中的按鍵事件事件
- 在RFT中傳送鍵盤按鍵 - inputChars vs. inputkeys
- js獲取鍵盤按鍵值程式碼例項JS
- jQuery按鍵響應事件keypress對應的按鍵編碼keycodejQuery事件
- js中的鍵盤事件JS事件
- Keypress - 捕獲鍵盤輸入的JavaScript庫JavaScript
- 鍵盤失靈按什麼鍵恢復 win10鍵盤恢復按鍵Win10
- Mac按鍵Mac
- 按鍵原理
- jquery中利用事件屬性which輕鬆獲取鍵盤和滑鼠鍵值jQuery事件
- 電腦按鍵以及鍵盤的總結
- 鍵盤亂鍵怎麼處理 電腦鍵盤按鍵錯亂
- 遠端控制篇:模擬按鍵 (轉)
- 按鍵中斷驅動程式
- 鍵盤事件事件
- 三行程式碼按鍵消抖 獨立按鍵 矩陣按鍵 長按 短按 雙擊行程矩陣
- tmux常用按鍵UX
- 如何在 pyqt 中捕獲並處理 Alt+F4 快捷鍵QT
- win10鍵盤按鍵速度在哪裡設定_win10鍵盤按鍵速度如何設定Win10
- asp.net點選鍵盤enter鍵,呼叫按鈕點選事件函式ASP.NET事件函式
- 【JavaScript】鍵盤按鍵Keycode對照表(鍵碼對照表)JavaScript
- JavaScript滑鼠中鍵滾動事件JavaScript事件
- 12.2 實現鍵盤模擬按鍵
- js實現阻止指定鍵盤按鍵效果JS
- 遠端桌面按鍵失效變成快捷鍵
- Qt 介面獲取鍵盤Enter鍵QT
- win10鍵盤部分按鍵錯亂怎麼辦_win10鍵盤按鍵錯亂如何解決Win10
- 基於51微控制器的矩陣按鍵矩陣
- 滑鼠、鍵盤事件事件
- 實現Android監控任意控制元件或按鍵雙擊事件方法Android控制元件事件
- tkinter中滑鼠與鍵盤事件(十五)事件