【问题标题】:Fastest way to get focused control in WinForms c#?在 WinForms c# 中获得集中控制的最快方法?
【发布时间】:2009-11-29 08:42:16
【问题描述】:

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

【问题讨论】:

标签: c# winforms


【解决方案1】:

您可以通过以下方式获取窗口句柄:

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

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

【讨论】:

    【解决方案2】:

    发现了一些似乎有效的东西:

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

    【讨论】:

      猜你喜欢
      • 2013-02-06
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 2010-09-14
      • 2016-04-10
      • 1970-01-01
      • 2015-05-20
      相关资源
      最近更新 更多