首页 > 解决方案 > 热键和搜索框功能的解决方法

问题描述

我有一个用于菜单的网格视图,并且该菜单中有或多或少的 30 个项目,因此我为该菜单实现了一个搜索框。现在我的问题是我为按钮单击事件分配了热键,当我尝试在搜索框中键入这些热键时,它不会注册而是会执行单击事件。

是否有一种解决方法,当我在搜索框中键入时,热键会注册并且点击事件不会执行,当我不在 searchBox 上键入时,热键会按应有的方式执行。

这是我的热键事件的示例。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            switch (keyData)
            {
              case Keys.A:
                  if (buttonThatDoSomething.Enabled == true)
                  {
                      buttonThatDoSomething.PerformClick();
                  }
                  return true; 
              default:
                  return base.ProcessCmdKey(ref msg, keyData);
            }
        }

标签: c#winforms

解决方案


我找到了一种解决我所处情况的方法,它适用于我我设置了一个条件来检查搜索框焦点,如果是这样,那么 keyData 将返回其默认输入。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            switch (keyData)
            {
                case Keys.A:
                    if (buttonThatDoSomething.Enabled == true && searchBox.Focused == true)
                    {
                        return base.ProcessCmdKey(ref msg, keyData);
                    }
                    else if (buttonThatDoSomething.Enabled == true && searchBox.Focused == false)
                    {
                        buttonThatDoSomething.PerformClick();
                    }
                    return true;
                default:
                    return base.ProcessCmdKey(ref msg, keyData);
            }
        }


推荐阅读