回答
不,還沒有一個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. C++鼠標懸停事件
- 5. 鼠標事件
- 6. PyHook鼠標事件
- 7. silverlight鼠標事件
- 8. prism4:鼠標事件
- 9. ILNumerics鼠標事件
- 10. 鼠標事件QT
- 11. Jquery鼠標事件
- 12. 鼠標事件BHO
- 13. jquery鼠標事件
- 14. jquery鼠標事件
- 15. JAVA鼠標事件
- 16. NSWindow鼠標事件
- 17. 鼠標點擊事件與C#爲kinect
- 18. 模擬Windows中的C++鼠標事件
- 19. Objective-C中的鼠標向下事件
- 20. C#WinForms UserControl鼠標事件幫助
- 21. 擴展鼠標單擊事件 - C
- 22. 在C(linux)中捕獲鼠標事件
- 23. 鼠標事件的怪事
- 24. SVG組鼠標懸停/鼠標事件
- 25. jtextarea鼠標事件覆蓋容器鼠標事件
- 26. clearTimeout鼠標懸停事件不清除setoutout鼠標事件
- 27. 鼠標向下,鼠標移動和鼠標事件的圖像?
- 28. 模擬鼠標事件和鍵盤事件C++ linux
- 29. 鼠標事件和動作事件
- 30. 處理鼠標事件
聽起來像你所要求的一臺時間機器。保存以前已知的位置。 – 2012-07-21 18:14:22