7

当鼠标悬停在我的一个申请表上时,我需要有关如何隐藏光标的帮助。我知道 MouseEnter 和 MouseLeave 事件的代码分别是 Cursor.Hide() 和 Cursor.Show() 。将此应用于表单本身不起作用。所以我插入了一个面板(将其 Dock 属性设置为 Fill)来包含其他控件。该代码适用于面板,但当我开始添加控件时,它没有。
我的猜测是我必须将代码应用于每个控件。我的表单上有大约 25 个控件,这看起来相当笨拙。
我的想法是这样的(我很抱歉格式化;我正在用哑机打字):

foreach(Control control in this.Controls)
{
    control.MouseEnter += control_MouseEnter;
    control.MouseLeave += control_MouseLeave;
}

代码在 FrmScreen_Load 中。但它仍然不起作用。我错过了什么吗?

我在 C# 中工作,但 VB.NET 中的解决方案是可以接受的。

4

2 回答 2

7

建议Cursor.Hide();在表单构造函数中使用。

将此应用于表单本身不起作用

当您移出应用程序的区域时,我认为您永远不必关心光标。表单初始化时将代码放在那里。

public Form1()
        {    
            InitializeComponent();
            Cursor.Hide();
        }

另一种推荐的方法是遍历控件集合,即

foreach(Control c in this.Controls)
{
  c.Cursor.Hide();
}
于 2012-08-20T14:37:57.260 回答
0

您说的是:@msarchet 我认为问题在于,在循环中,当鼠标位于控件上时,会调用 control_MouseEnter (隐藏光标),但在此之前,鼠标刚刚离开另一个显示光标的控件. 总而言之,也许这两个事件被同时调用,因此似乎总是显示光标。正是我的想法

如果您认为这是问题所在,请不要为离开所有控件执行 cursor.show,您只希望它在离开面板时显示。在您的面板上设置 cursor.show 和 cursor.hide,所有其他控件只需获得 cursor.hide。

于 2012-08-20T15:03:19.240 回答