我已将一些 MouseMove
和 MouseClick
事件附加到我的程序中,接下来是其中之一:
- 获取“全局”鼠标移动,这样即使在表单外我也可以读取鼠标位置。
- 首先防止我的鼠标离开表单。
我的项目是一个游戏,所以像大多数其他游戏一样防止鼠标离开我的表单会很棒(ofc。如果您使用 alt+tab fe 切换焦点,您可以将其移出。)并查看要求全局小鼠运动的其他问题的答案,它们对我的需要来说似乎很困惑。
有没有一种简单的方法可以防止我的鼠标超出我的表单边界?或者实际上为了防止它越过边界,我希望鼠标留在客户区内。
关于游戏的附加信息:
该游戏是一款时长 5-30 秒的短生存游戏(30 秒后变得太难让你无法存活),你必须用鼠标躲避子弹。当您将鼠标移出窗体然后播放器(连接到鼠标的 System.Windows.Forms.Panel
)停止移动并立即被子弹击中时,这真的很烦人。这就是防止鼠标离开该区域的原因。
最佳答案
迟到的答案,但可能会派上用场。您可以为表单订阅 MouseLeave
和 MouseMove
事件并像这样处理它们:
private int X = 0;
private int Y = 0;
private void Form1_MouseLeave(object sender, EventArgs e)
{
Cursor.Position = new Point(X, Y);
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (Cursor.Position.X < this.Bounds.X + 50 )
X = Cursor.Position.X + 20;
else
X = Cursor.Position.X - 20;
if (Cursor.Position.Y < this.Bounds.Y + 50)
Y = Cursor.Position.Y + 20;
else
Y = Cursor.Position.Y - 20;
}
以上将确保鼠标光标永远不会离开表单的边界。确保在游戏结束后取消订阅事件。
编辑:
Hans Passants's answer比我的回答更有意义。在 MouseEnter
上使用 Cursor.Clip
:
private void Form1_MouseEnter(object sender, EventArgs e)
{
Cursor.Clip = this.Bounds;
}
如果出现任何错误/崩溃,您可以释放光标(我相信您可以捕获它们):
Cursor.Clip = Rectangle.Empty;
关于c# - 防止鼠标离开我的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15029274/