【问题标题】:How to detect MouseDown on any non-TextBox control?如何在任何非文本框控件上检测 MouseDown?
【发布时间】:2011-08-25 02:53:55
【问题描述】:

TextBoxes 和 NumericUpDowns 有一个奇怪的属性,即一旦它们被选中就不允许你取消选中它们。当我的用户选择 NumericUpDown 并单击表单上的其他位置时,应取消选择 NumericUpDown。

不幸的是,事实并非如此。目前,我只是在处理表单上所有其他控件的 MouseDown 事件(如面板和实际表单本身),并且只是调用随机标签的 Focus 方法来从 NumericUpDown 中移除焦点。但是,这不能应用于菜单项或滚动条。

必须有更好的方法来做到这一点。用户可能希望滚动面板而不是 NumericUpDown 并直观地单击面板然后使用滚轮,但目前这将滚动 NumericUpDown,因为它仍然具有焦点。

感谢阅读。

编辑:问题仍未解决。

【问题讨论】:

    标签: c# winforms textbox focus numericupdown


    【解决方案1】:

    通常面板控件是不可聚焦的控件。因此,单击 Panel 不会从 TextBox 或 NumericUpDown 控件中移除焦点。

    解决方法是,在面板上放置一个按钮并将其从视图中移开,例如设置其 x = -100 和 y = -100。不要设置 visible = false。

    现在,每当用户单击面板(Panel_Click 事件)时,都会将焦点 (Button.Focus()) 设置为该按钮。这样面板就可以通过滚轮滚动了。

    【讨论】:

      【解决方案2】:

      将数字框括在某种面板中,然后执行

      panel1.MouseHover += new EventHandler(panel1_MouseHover);
      
      private void panel1_MouseHover(object sender, EventArgs e)
              {
                  if (numericUpDown1.Focused)
                  {
                      panel1.Focus();
                  }
              }
      

      我测试了它,它可以工作。!

      【讨论】:

      • 我不确定这真的有什么帮助?也许我错过了一些东西,但我有点想要相反的东西。如果鼠标点击屏幕上的其他任何地方,NumericUpDown 应该会变得不聚焦。
      • 是的,它就是这样做的,当您离开数字文本框时它会失去焦点,您甚至可以将悬停更改为单击或其他内容,但它会执行您想要的操作。我不确定它对你有什么帮助
      • 如果我选择了 NumericUpDown 然后单击面板或标签,例如,NumericUpDown 仍处于选中状态。我不确定您的代码解决了什么问题,但问题仍然存在。
      • 如果您在面板上滚动鼠标远离数字框,那么焦点将转移到面板上。我看看能不能给你发个视频。
      • 是的,但只有慢慢滚动。此外,我不希望它在离开 NumericUpDown 的边界时自动取消选择。我只希望它在单击应用程序的其他位置时取消选择。
      猜你喜欢
      • 2012-03-20
      • 2011-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多