2011-05-12 72 views
2

在我的winforms应用程序中,我有一个功能,打开下拉菜单,并向左或向右移动光标以选择子选项。但是,我不希望光标移动,我只是希望它们自己的子选项向左或向右移动(取决于鼠标尝试移动的方向)。我希望这对你有意义。停止从水平移动鼠标光标,但仍然要捕获MouseMove事件

有谁知道如何停止光标在特定方向上的移动,同时仍然能够在用户“移动”鼠标时捕获mousemove事件?

任何帮助表示赞赏,谢谢!

回答

6

你不应该试图实现这一点,因为它打破了所有的用户界面标准,只会混淆用户。这不取决于您的应用程序来决定鼠标应该移动的位置。如果你想实现一些允许导航选择的其他方式,那么我会建议调查其他选项。

+0

此功能是通过我的客户请求的游标位置。 – 2011-05-12 07:53:56

+3

然后,作为一名经验丰富的开发人员,您的工作是让他相信这是一个非常糟糕的主意,为什么这是一个坏主意,并提出一些遵循最佳实践的替代方案。你是专业人士,这就是为什么他们是客户。 – 2011-05-12 07:57:11

+0

艾拉尼是如此的正确。你应该说服你的客户。 – DanielB 2011-05-12 08:09:24

2

我不认为你应该实施这样的解决方案。

但是,您可以将鼠标光标位置设置回到MouseMove处理程序中的原始位置。但是,在设置位置并在此之后再次添加位置之前,您必须移除处理程序。您可以通过pInvoke设置鼠标位置。如何做到这一点,你可以在这里找到http://pinvoke.net/default.aspx/user32.mouse_event

+0

谢谢@丹尼B ..检查链接现在:) – 2011-05-12 07:58:39

1

可以设置manualy

private void Form1_MouseMove(object sender, MouseEventArgs e) 
    { 
     Cursor.Position = new Point(400,400); 
     Console.WriteLine("fired"); 
    } 
+0

谢谢,@Stecya,我想到了这一点,但我想我只是觉得会有更多这样的..我不知道,一个更正确的方法来做到这一点?但后来我再也不明白为什么这种方式不适合了。谢谢:) – 2011-05-12 07:58:05

+0

这是否容易?为什么我总是使用pInvoke oO – DanielB 2011-05-12 07:58:34

+0

是啊:)但是,也许在不同的Win OS版本中它可能不那么容易?必须有一个原因,你必须使用pInvoke :) – 2011-05-12 08:00:14