私の推測では、イベントをトリガーする領域にフォームの上に別のコントロールがあると思います。その場合、コントロールは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イベントハンドラコードを投稿してください。 –
私は文字通り、その関数を呼び出すだけで、MouseMoveイベントでは何も呼び出されません。 – user1340531
@ user1340531:とにかく投稿しますか? – mpen