2011-12-07 79 views
1

要麼我不完全瞭解事件如何工作或德爾菲棱鏡已瘋了!爲什麼MouseMove事件觸發僅當鼠標點擊MouseDown事件時?

我有一個winform,mousedown事件和mousemove事件。每當我單擊鼠標左鍵時,MouseDown事件就會如預期的那樣觸發,但當MouseMove事件沒有被假設時也會立即觸發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事件。他們工作正常。我似乎無法弄清楚爲什麼這個特別的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

它發生是因爲鼠標捕獲被釋放。 –

相關問題