2011-12-07 80 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

它发生是因为鼠标捕获被释放。 –

相关问题