【问题标题】:Hide cursor on my form在我的表单上隐藏光标
【发布时间】:2012-08-20 14:32:40
【问题描述】:

当鼠标悬停在我的一个申请表上时,我需要有关如何隐藏光标的帮助。我知道 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 中的解决方案是可以接受的。

【问题讨论】:

  • 你的意思是'它仍然不起作用'是for循环没有执行还是你用来显示和隐藏光标的代码不起作用
  • 您也可以使用游标编辑器创建空游标文件并将其用作表单游标属性 - this.Cursor = new Cursor("path to empty cursor file here");
  • @msarchet 我认为问题是在循环中,当鼠标在控件上时,会调用 control_MouseEnter (隐藏光标),但在此之前,鼠标刚刚离开另一个控件显示光标。总而言之,也许这两个事件被同时调用,因此似乎总是显示光标。就是我的想法
  • @Shadow Wizard 我想过这样做。如果没有更好的解决方案,我决定将其作为最后的手段

标签: c# winforms


【解决方案1】:

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

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

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

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

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

foreach(Control c in this.Controls)
{
  c.Cursor.Hide();
}

【讨论】:

  • 实际上,我在我的应用程序中同时显示两个表单。在构造函数中设置 ~Cursor.Hide()~ 也会隐藏另一个窗体上的光标。
  • 在另一个表单上设置 cursor.show 怎么样。也许 this.cursor.show() 应该在 form2 上工作。
【解决方案2】:

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

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

【讨论】:

  • 如果您很好地阅读了这个问题,那是我的第一次尝试。仅当面板中没有控件时才有效(这是没用的)。
  • 我认为您需要重新阅读我所说的内容。您从未提到只将 cursor.hide 放在所有控件上,并将 cursor.hide 和 cursor.show 放在面板上。您说您尝试将两者都放在面板上,然后尝试将两者都放在所有控件上。我不是说其中任何一个。我是说将 cursor.hide 和 cursor.show 事件放在面板上,只将 cursor.hide 事件放在其他控件上。
  • 我现在明白了。但是从 Cursor.Hide() 上的 MSDN 页面(对不起,我现在没有链接),有一个公平的警告,应该有一个相应的 Cursor.Show()。我认为他们是对的,因为有时光标不会被隐藏,而在其他时候却会。
  • 好吧,这只是一个想法。面板的 cursor.show 应该可以处理。
猜你喜欢
  • 2011-01-29
  • 2022-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
相关资源
最近更新 更多