Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 为什么当鼠标左键仅用于MouseDown事件时,MouseMove事件会触发?_.net_Events_Delphi Prism_Mousemove_Mousedown - Fatal编程技术网

.net 为什么当鼠标左键仅用于MouseDown事件时,MouseMove事件会触发?

.net 为什么当鼠标左键仅用于MouseDown事件时,MouseMove事件会触发?,.net,events,delphi-prism,mousemove,mousedown,.net,Events,Delphi Prism,Mousemove,Mousedown,要么我不完全理解事件是如何运作的,要么德尔福棱镜已经疯了 我有一个winform、mousedown事件和mousemove事件。每当我仅单击鼠标左键时,MouseDown事件会按预期触发,但在不需要的情况下,MouseMove事件也会立即触发 下面是我的winform designer中的一段代码,其中方法被分配给事件 self.ClientSize := new System.Drawing.Size(751, 502); self.KeyPreview := true; sel

要么我不完全理解事件是如何运作的,要么德尔福棱镜已经疯了

我有一个winform、mousedown事件和mousemove事件。每当我仅单击鼠标左键时,MouseDown事件会按预期触发,但在不需要的情况下,MouseMove事件也会立即触发

下面是我的winform designer中的一段代码,其中方法被分配给事件

  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事件会出问题。

我忘记了发生的原因

但对于可能的解决方案:

Point _LastPoint = Point.Empty;

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

我忘记了发生的原因

但对于可能的解决方案:

Point _LastPoint = Point.Empty;

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

你说MouseMove事件不应该触发是什么意思?你的MouseDown事件处理程序是否删除了MouseMove处理程序?@RosisDead,如果你所做的只是单击鼠标左键而不移动鼠标指针,那么预期触发或触发的唯一事件就是MouseDown,而不是MouseMove。按设计。MouseDown捕获鼠标,MouseUp释放鼠标。Windows希望确保捕获结束后窗口知道鼠标的位置,以便生成额外的MouseMove消息。这永远不会是一个问题,因为看不到代码的其余部分来说明原因。你认为不应该触发MouseMove事件是什么意思?你的MouseDown事件处理程序是否删除了MouseMove处理程序?@RosisDead,如果你所做的只是单击鼠标左键而不移动鼠标指针,那么预期触发或触发的唯一事件就是MouseDown,而不是MouseMove。按设计。MouseDown捕获鼠标,MouseUp释放鼠标。Windows希望确保捕获结束后窗口知道鼠标的位置,以便生成额外的MouseMove消息。这永远不会是一个问题,因为看不到代码的其余部分来说明原因。这是因为鼠标捕获被释放。这是因为鼠标捕获被释放。