如何在任何非TextBox控件上检测MouseDown?

时间:2011-08-25 02:53:56

标签: c# winforms textbox focus numericupdown

TextBoxes和NumericUpDowns具有奇怪的属性,一旦选中它们就不允许你取消选择它们。当我的用户选择NumericUpDown并单击表单上的else-where时,应取消选择NumericUpDown。

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

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

感谢阅读。

编辑:问题仍未解决。

2 个答案:

答案 0 :(得分:1)

通常,Panel Control是一个不可聚焦的控件。因此,单击Panel将不会从TextBox或NumericUpDown Countrol中删除焦点。

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

现在,只要用户点击Panel(Panel_Click事件),就将焦点(Button.Focus())设置为该按钮。通过这种方式,面板可以通过滚轮滚动。

答案 1 :(得分:0)

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

panel1.MouseHover += new EventHandler(panel1_MouseHover);

private void panel1_MouseHover(object sender, EventArgs e)
        {
            if (numericUpDown1.Focused)
            {
                panel1.Focus();
            }
        }

我测试了它并且它有效。!