C# 分离鼠标按下和鼠标单击事件

C# 分离鼠标按下和鼠标单击事件,c#,winforms,drag,C#,Winforms,Drag,我有两个事件连接到一个控件。鼠标单击事件将播放音频文件。由鼠标下移、鼠标移动和鼠标上移组成的拖动事件垂直拖动控件。通过垂直拖动控件,可以为控件指定不同的歌曲。 我遇到的问题是,当我拖动控件时,音乐会播放。我不想要这个,因为这是一个拖动操作。 音乐只应在单击控件并移动音符时播放。 我认为设置边界,例如,当控件仅移动5个像素时,播放声音,否则拖动控件应该可以解决问题,但我尝试创建边界失败 请您指导如何更好地用代码片段解决这个问题。 非常感谢。 阻力 你为什么不简单地扩展你在鼠标中的条件点击:如果e.

我有两个事件连接到一个控件。鼠标单击事件将播放音频文件。由鼠标下移、鼠标移动和鼠标上移组成的拖动事件垂直拖动控件。通过垂直拖动控件,可以为控件指定不同的歌曲。 我遇到的问题是,当我拖动控件时,音乐会播放。我不想要这个,因为这是一个拖动操作。 音乐只应在单击控件并移动音符时播放。 我认为设置边界,例如,当控件仅移动5个像素时,播放声音,否则拖动控件应该可以解决问题,但我尝试创建边界失败

请您指导如何更好地用代码片段解决这个问题。 非常感谢。 阻力


你为什么不简单地扩展你在鼠标中的条件点击:如果e.Button==MouseButtons.Left&!IsDraging?我试过了,但没用。唉,这些音符问题已经过时了,看起来你们全班都在寻求帮助。你们就不能一起工作吗?只需使用bool字段,将其命名为justdrack。拖动时将其设置为true,设置时忽略单击事件。使用MouseDown将其设置为false。因为您播放了两次wav:一次在MouseClick中,一次在StartDrag中,所以它似乎不起作用。
   int Locked_yLoc; int index;
   private void StartDrag(object sender, MouseEventArgs e)
   {
       if (e.Button == MouseButtons.Left)
       {
           sp1.SoundLocation = this.pitch + ".wav";
           sp1.Play();
           tm1.Interval = 100 * this.noteDuration;
           tm1.Start();

           isDragging = true;
           pitch = e.Y;
           this.Location = new Point(this.Location.X, pitch);
       }
   }

   private void StopDrag(object sender, MouseEventArgs e)
   {
       if (e.Button == MouseButtons.Left)
       {
           isDragging = false;
           this.Location = new Point(this.Location.X, Locked_yLoc);
           pitch = index;
           //lbl8.Text = pitch.ToString();
       }
   }

   private void OnDrag(object sender, MouseEventArgs e)
   {
       if (isDragging)
       {
           this.Top = this.Top + (e.Y - pitch);

           Locked_yLoc = (int)Math.Round((this.Top + (e.Y - pitch)) / 10.0) * 10;
           for (int i = 0; i < yLocation.Length; i++)
           {
               if (Locked_yLoc == yLocation[i])
               {
                   index = CorrPitch[i];
               }
           }
       }
   } 
   private void MusicNote_MouseClick(object sender, MouseEventArgs e)
   {
       if (e.Button == MouseButtons.Left)
       {
           sp1.SoundLocation = this.pitch + ".wav";
           sp1.Play();
           tm1.Interval = 100 * this.noteDuration;
           tm1.Start();

       }
   }