回答
不,还没有一个MousePreMove
事件,但你可以写上自己的东西来获得光标的方向。例如:
public partial class Form1 : Form {
Point cursorPosition;
Direction cursorDirection, previousCursorPosition;
public event EventHandler<MouseDirectionEventArgs> DirectionChanged;
public Form1() {
InitializeComponent();
cursorPosition = PointToClient(Cursor.Position);
DirectionChanged += new EventHandler<MouseDirectionEventArgs>(Form1_DirectionChanged);
}
void Form1_DirectionChanged(object sender, MouseDirectionEventArgs e) {
MessageBox.Show(e.MouseDirection.ToString());
}
protected override void OnMouseMove(MouseEventArgs e) {
if (e.X > cursorPosition.X && e.Y > cursorPosition.Y)
cursorDirection = Direction.RightDown;
else if (e.X > cursorPosition.X && e.Y < cursorPosition.Y)
cursorDirection = Direction.RightUp;
else if (e.X < cursorPosition.X && e.Y > cursorPosition.Y)
cursorDirection = Direction.LeftDown;
else if (e.X < cursorPosition.X && e.Y < cursorPosition.Y)
cursorDirection = Direction.LeftUp;
OnDirectionChanged(new MouseDirectionEventArgs(cursorDirection));
previousCursorPosition = new Point(cursorPosition.X, cursorPosition.Y);
cursorPosition = e.Location;
base.OnMouseMove(e);
}
protected virtual void OnDirectionChanged(MouseDirectionEventArgs e){
if (DirectionChanged != null)
DirectionChanged(this, e);
}
}
enum Direction {
LeftUp,
LeftDown,
RightUp,
RightDown
}
class MouseDirectionEventArgs : EventArgs {
public readonly Direction MouseDirection {
get;
set;
}
public MouseDirectionEventArgs(Direction direction) {
MouseDirection = direction;
}
}
这是一个简单的程序,显示鼠标方向与前一个鼠标位置相比较。
编辑:
如果你想阻止一个方向的鼠标移动,你应该做喜欢这里:
void Form1_DirectionChanged(object sender, MouseDirectionEventArgs e) {
if(e.MouseDirtection == Direction.LeftUp) //example
Cursor.Position = PointToScreen(previousCursorPosition);
}
好的,但我的目标是防止鼠标移动事件只是方向。我可以使用你的代码来知道哪个方向,但是如果我的一些情况已经发生,我需要防止移动与顶部,底部,右侧或左侧。通过Cursor.Clip属性,我永远无法阻止从右向左移动。任何想法? – bit 2012-07-21 18:46:17
我编辑了我的答案,它应该按你的意愿工作。 – 2012-07-21 19:03:56
对不起,这不行。通过WndProc覆盖我阻止窗体关闭屏幕。例如,如果表单已达到最大宽度位置(这意味着窗体停靠在屏幕右侧),我必须能够允许所有鼠标移动,除了从左到右的方向。你现在明白我了吗? – bit 2012-07-21 20:05:43
我真的不明白你为什么会想停止从鼠标移动。这会造成的一个重要问题是您的用户不会移动鼠标(显然)。所以,当用户在使用你的程序的时候他们提出这个问题,他们将无法点击开始菜单。
然而,因为这是你的目标,你将得到更好的改变从“停止移动鼠标”你的思想,以“如果老鼠是不是我想要它,把它放在我做”服务。
所以,使用的OnMouseMove事件按照Fuex的代码,并且是这样的(这仅仅是伪码)
cursorPosition = e.Location;
if(cursorPosition!= alowedArea) cursorPosition = preciousCursorPostion;如果(cursorPosition!= alowedArea) cursorPosition = preciousCursorPostion; }
preciousCursorPostion = cursorPosition;
e.Location = cursorPosition;
- 1. C++鼠标悬停事件
- 2. C中的鼠标事件#
- 3. 模拟鼠标事件? C#
- 4. 鼠标事件
- 5. PyHook鼠标事件
- 6. JAVA鼠标事件
- 7. jquery鼠标事件
- 8. 鼠标事件BHO
- 9. NSWindow鼠标事件
- 10. prism4:鼠标事件
- 11. silverlight鼠标事件
- 12. 鼠标事件的怪事
- 13. 在C(linux)中捕获鼠标事件
- 14. Objective-C中的鼠标向下事件
- 15. C#WinForms UserControl鼠标事件帮助
- 16. 扩展鼠标单击事件 - C
- 17. SVG组鼠标悬停/鼠标事件
- 18. clearTimeout鼠标悬停事件不清除setoutout鼠标事件
- 19. X11鼠标移动事件
- 20. 画布:鼠标事件
- 21. 鼠标滚动事件
- 22. 替代jquery鼠标事件
- 23. 捕捉鼠标事件
- 24. 未触发鼠标事件
- 25. Perl6:NCurses和鼠标事件
- 26. D3鼠标释放事件
- 27. Java BounceBall鼠标事件
- 28. 鼠标事件另一类
- 29. WPF鼠标单击事件
- 30. 拖动鼠标事件
听起来像你所要求的一台时间机器。保存以前已知的位置。 – 2012-07-21 18:14:22