我正在尝试在Music Staff上垂直上下拖动Music Notes。但是,我希望音符只允许拖动到特定的间隔(仅特定的y坐标)上,而不是持续的拖动。例如,在垂直线上,可以将音符拖到坐标(0,0),(0,5)或(0,10)。
下面是我的相关代码:
private Point MouseDownLocation;
private void Note_MouseDown(object sender, MouseEventArgs e)
{
foreach (MusicNote mn in panel2.Controls.OfType<MusicNote>())
{
if (sender == mn)
{
if (e.Button == MouseButtons.Left)
{
MouseDownLocation = e.Location;
}
}
}
}
private void Note_MouseMove(object sender, MouseEventArgs e)
{
foreach(MusicNote mn in panel2.Controls.OfType<MusicNote>())
{
if (sender == mn)
{
if (e.Button == MouseButtons.Left)
{
mn.Top = e.Y + mn.Top - MouseDownLocation.Y;
}
}
}
}
感谢您的帮助。谢谢!
答案 0 :(得分:0)
基本上,您需要检查是向上拖动还是向下拖动 您应该要检查MouseDown.X并将其与MouseUp.X进行比较(如果要检查垂直方向,也可以将其与Y进行比较)。重要的是要注意(0,0)是屏幕的左上方。因此,您需要比较鼠标按下事件和鼠标按下事件之间的X位置。
下面是一个示例,其中一个标签以10为步长上下移动
Propagation.REQUIRES_NEW