2009-11-29 105 views
4

我在我的主窗體中使用ProcessCmdKey爲應用程序測試某些鍵並給予空間,右側,左側和其他幾個特殊處理。即使用戶在嵌套的用戶控件集合內輸入TextBox,也會調用主窗體中的ProcessCmdKey。當他們專注於TextBox控件時,我不想處理Space鍵,因爲他們永遠無法輸入空格。如何在應用程序範圍內測試當前關注窗口的類型?在WinForms c#中獲得集中控制的最快方法?

+0

參見http://stackoverflow.com/questions/435433/what-is-the-preferred-way-to-find-focused-control-in -winforms-應用 – RenniePet 2015-04-01 05:45:56

回答

6

你可以利用這個得到的窗口句柄:

[DllImport("user32.dll")] 
    private static extern IntPtr GetFocus(); 

然後你就可以用Control.FromHandle取得與該句柄相關聯的.NET控件(如果有的話)。

0

找到東西,似乎工作:

[DllImport("user32.dll")] 
static extern IntPtr GetFocus(); 

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    IntPtr wndHandle = GetFocus(); 
    Control focusedControl = FromChildHandle(wndHandle); 
    if(focusedControl is DevExpress.XtraEditors.TextBoxMaskBox) 
    { 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
    ... 
} 
相關問題