在WinForms c#中获得集中控制的最快方法?

时间:2009-11-29 00:05:05

标签: c# winforms

我在我的主窗体窗口中使用ProcessCmdKey,以便应用程序测试某些键并给出Space,Right,Left和其他一些特殊处理。即使用户在嵌套的用户控件集中键入TextBox,也会调用主窗体中的ProcessCmdKey。当他们专注于TextBox控件时,我不想处理Space键,因为他们永远无法键入空格。如何在应用程序范围内测试当前聚焦窗口的类型?

2 个答案:

答案 0 :(得分:6)

您可以使用以下方法获取窗口句柄:

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

然后,您可以使用Control.FromHandle获取与该句柄相关联的.NET控件(如果有)。

答案 1 :(得分: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);
    }
    ...
}