为什么只在MouseDown事件中单击鼠标时会触发MouseMove事件?

ThN*_*ThN 1 .net events delphi-prism mousemove mousedown

要么我完全不了解事件是如何工作的,要么Delphi Prism已经疯了!!!

我有一个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);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?请帮助我对此感到沮丧,因为我在程序的其他部分有鼠标移动事件.他们工作正常.我似乎无法弄清楚为什么这个特定的mousemove事件正在起作用.

Lar*_*ech 7

我忘记了发生的原因.

但是对于可能的解决方法:

Point _LastPoint = Point.Empty;

private void Form1_MouseMove(object sender, MouseEventArgs e) {
  if (_LastPoint != e.Location) {
    _LastPoint = e.Location;
    // run MouseMove code:
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是因为鼠标捕获被释放了. (4认同)