代码之家  ›  专栏  ›  技术社区  ›  P a u l

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

  •  4
  • P a u l  · 技术社区  · 16 年前

    我正在主窗体窗口中使用processCmdKey,让应用程序测试某些键,并提供空间、右、左和其他一些特殊处理。即使用户在嵌套的用户控件集中键入文本框,也会调用主窗体中的processCmdKey。我不想在焦点放在文本框控件上时处理空格键,因为它们永远无法键入空格。如何在应用程序范围内测试当前焦点窗口的类型?

    2 回复  |  直到 16 年前
        1
  •  6
  •   Wim Coenen    16 年前

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

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

    然后,您可以获取与该句柄关联的.NET控件(如果有一个句柄的话) Control.FromHandle .

        2
  •  0
  •   P a u l    16 年前

    找到了一些有用的东西:

    [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);
        }
        ...
    }