2011-12-07 51 views
1

イベントの仕組みやDelphi Prismの怒りを完全に理解していませんか?MouseDownイベントでマウスの左ボタンをクリックしたときにMouseMoveイベントが発生するのはなぜですか?

私はwinform、mousedownイベント、およびmousemoveイベントを持っています。マウスの左ボタンのみをクリックすると、MouseDownイベントは期待どおりに起動しますが、ALSO MouseMoveイベントは想定されていない直後に発生します。

ここでは、メソッドがイベントに割り当てられているWinformデザイナのコードを示します。

self.ClientSize := new System.Drawing.Size(751, 502); 
    self.KeyPreview := true; 
    self.Name := 'Maker'; 
    self.Text := 'Window Maker'; 
    self.Load += new System.EventHandler(@self.Maker_Load); 
    self.FormClosing += new System.Windows.Forms.FormClosingEventHandler(@self.Maker_FormClosing); 
    self.Shown += new System.EventHandler(@self.Maker_Shown); 
    self.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(@self.Maker_MouseDoubleClick); 
    self.MouseDown += new System.Windows.Forms.MouseEventHandler(@self.Maker_MouseDown); 
    self.MouseMove += new System.Windows.Forms.MouseEventHandler(@self.Maker_MouseMove); 
    self.MouseUp += new System.Windows.Forms.MouseEventHandler(@self.Maker_MouseUp); 
    self.Paint += new System.Windows.Forms.PaintEventHandler(@self.Maker_Paint); 
    self.ObjectPopup.ResumeLayout(false); 
    self.ResumeLayout(false); 

私は間違っていますか?私がプログラムの他の部分にmousemoveイベントを持っているので、私はこれ以上不満を感じています。彼らは正常に動作します。私はなぜこのperticular mousemoveイベントが起きているのか分かりません。

+0

あなたがMouseMoveイベントが発動することになっていないとはどういう意味ですか? MouseDownイベントハンドラはMouseMoveハンドラを削除しますか? – rossisdead

+0

@rossisdead、マウスの左ボタンをクリックしてマウスポインタを動かしていない場合は、トリガや発射が予想される唯一のイベントはMouseDownだけです。 – ThN

+1

設計上。 MouseDownはマウスをキャプチャし、MouseUpはそれを解放します。 Windowsは、キャプチャが終了した後にマウスがどこにあるかをウィンドウが認識していることを確認して、余分なMouseMoveメッセージを生成します。これは決して問題ではないはずです。コードの残りの部分がどうしてそれなのかを知ることはできません。 –

答えて

7

私はその理由を忘れてしまいます。

しかし、周りの可能な作業用:

Point _LastPoint = Point.Empty; 

private void Form1_MouseMove(object sender, MouseEventArgs e) { 
    if (_LastPoint != e.Location) { 
    _LastPoint = e.Location; 
    // run MouseMove code: 
    } 
} 
+4

マウスキャプチャがリリースされたために起こります。 –

関連する問題