我的猜測是在您想要觸發事件的區域的窗體上還有另一個控件。如果是這樣,控件捕獲MouseMove
事件。
例如,在這裏,我在位置0,0的左上角添加了一個綠色的200x200面板。如果鼠標在面板上移動,表單的MouseMove
事件將停止捕獲鼠標光標位置。在我的表單的mouse_move
事件中,我將窗體的文本設置爲顯示鼠標座標。請注意,當鼠標實際位於0,0時,窗口文本中的座標仍爲200,200(由於必須單擊SnippingTool.exe才能獲取屏幕截圖,因此無法看到我的光標)。
爲了解決這個問題,使用在面板的MouseMove
事件放置在你的窗體的MouseMove
事件(或任何控制你正在使用)相同的代碼。這將導致表單文本中的正確座標。
這裏是代碼(這可以明顯地重構爲一個方法):
public partial class Form1 : Form
{
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
public Form1()
{
InitializeComponent();
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
this.Text = string.Format("X: {0}, Y: {1}", e.X, e.Y);
if (e.X >= 0 && e.X <= 200)
{
if (e.Y >= 0 && e.Y <= 200)
{
SetCursorPos(500, 500);
}
}
}
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
this.Text = string.Format("X: {0}, Y: {1}", e.X, e.Y);
if (e.X >= 0 && e.X <= 200)
{
if (e.Y >= 0 && e.Y <= 200)
{
SetCursorPos(500, 500);
}
}
}
}
請發佈您的MouseMove事件處理程序代碼。 – 2013-03-25 01:35:18
我真的只是在MouseMove事件中調用該函數而沒有其他操作。 – user1340531 2013-03-25 01:38:32
@ user1340531:無論如何發佈? – mpen 2013-03-25 01:41:03