我正在为可视化工具编写一个拖动系统。单击并拖动时,它会移动您在窗口中看到的内容。当鼠标击中面板边缘时,我开始重新定位光标,使其永远不会离开框。它跟踪光标在盒子内部的虚拟位置。这部分代码工作正常。
只要有一个MouseMoved事件且位置在框内,我就会执行Cursor.Show()。如果它在框外,我会做Cursor.Hide()。当用户放开鼠标按钮时,我执行Cursor.Show()。
有很多问题。当第一次Hide调用发生时,它不会隐藏。我必须将光标的虚拟位置移到包含窗口之外才能发生隐藏。当我搬回来时,即使正在调用Show,它也不会变得可见。最后,当释放鼠标按钮时,尽管显示被调用,光标也不会出现。
而不是要求人们调试我的代码,我只是想知道事件系统中发生了什么使得Cursor.Hide / Show不能按照我期望的方式工作。我的印象是,如果一个名为Hide的控件,光标会在该控件内部被隐藏;同样,如果我从控制中调出show。
答案 0 :(得分:11)
对于遇到此问题的人,请尝试以下方式:
private bool _CursorShown = true;
public bool CursorShown
{
get
{
return _CursorShown;
}
set
{
if (value == _CursorShown)
{
return;
}
if (value)
{
System.Windows.Forms.Cursor.Show();
}
else
{
System.Windows.Forms.Cursor.Hide();
}
_CursorShown = value;
}
}
并使用它:
CursorShown = false; // Will hide the cursor
CursorShown = false; // Will be ignored
CursorShown = true; // Will show the cursor
CursorShown = true; // Will be ignored
答案 1 :(得分:9)
“计算。两个节目和一个隐藏不会隐藏光标。” - 汉斯帕斯特
答案 2 :(得分:0)
您可以简化它
//Whenever you want to hide the cursor
Cursor.Hide();
countCursorHide++;
并显示光标
int countCursorHide = 0;
private void showCursor()
{
for (int i = 0; i < countCursorHide; i++)
{
Cursor.Show();
}
countCursorHide = 0;
}