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