Почему событие MouseMove срабатывает, когда левая мышь щелкается только для события MouseDown? - PullRequest
1 голос
/ 07 декабря 2011

Либо я не совсем понимаю, как работают события, либо Delphi Prism сошла с ума !!!

У меня есть событие winform, mousedown и mousemove.Всякий раз, когда я нажимаю только левую кнопку мыши, событие MouseDown срабатывает, как и ожидалось, но ТАКЖЕ событие 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);

Что я делаю не так?Пожалуйста, помогите, я расстраиваюсь из-за этого, потому что у меня есть события перемещения мыши в других частях моей программы.Они отлично работают.Кажется, я не могу понять, почему происходит это событие движения мышц черепа.

1 Ответ

7 голосов
/ 07 декабря 2011

Я забыл причину, по которой это происходит.

Но для возможного обходного пути:

Point _LastPoint = Point.Empty;

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