WinForms中鼠标光标仅在一个窗体上隐藏

3

我有一个C#应用程序,其中有两个同时可见的窗体,我需要在鼠标光标仅停留在其中一个窗体时隐藏它。如果我使用Cursor.Hide(),它会对两个窗体都生效。

5个回答

4
您需要使用 MouseEnter MouseLeave 事件来实现此逻辑,例如每个表单都应如下所示:
    private void frm1_MouseEnter(object sender, EventArgs e)
    {
       Cursor.Hide();
    }
    private void frm1_MouseLeave(object sender, EventArgs e)
    {
       Cursor.Show();
    }

在应该隐藏光标的表单上执行上述操作,并将此添加到应该使光标可见的表单中:
    private void frm2_MouseEnter(object sender, EventArgs e)
    {
       Cursor.Show();
    }

我尝试了这个,谢谢,但是鼠标指针出现在窗体内的控件上。 - Santiago
尝试在frm1上移除MouseLeave事件...但我不知道光标是否会隐藏,直到它进入frm2。 - Luiscencio
这似乎是一个好主意,但我不知道为什么有时当鼠标进入窗体时,MouseEnter事件不会触发,所以窗口想要时会消失和出现。 - Santiago

1
你可以创建一个“空白”光标,并设置myForm.Cursor = blankCursor;。这将使该特定窗体显示一个特定的光标,该光标可以完全透明。

0
你试过使用 this.Cursor = Cursors.None 而不是 Cursor.Hide() 吗?

1
Cursors.None不是有效的光标。 - Santiago
这个解决方案(不幸的是)只适用于WPF。显然(虽然未指定),OP想要WinForms解决方案。 - Dax Fohl

0
你可以使用 Control.MouseEnter 和 Control.MouseLeave 事件来触发隐藏或显示光标。

0
如果您想隐藏光标以防止用户在表单上进行任何操作,请考虑使用 this.UseWaitCursor = true;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接