在C#中拖动对象

时间:2019-01-06 13:41:51

标签: c# forms drag-and-drop picturebox drag

我正在尝试在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;
                }
            }
        }
    }

感谢您的帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

基本上,您需要检查是向上拖动还是向下拖动 您应该要检查MouseDown.X并将其与MouseUp.X进行比较(如果要检查垂直方向,也可以将其与Y进行比较)。重要的是要注意(0,0)是屏幕的左上方。因此,您需要比较鼠标按下事件和鼠标按下事件之间的X位置。

下面是一个示例,其中一个标签以10为步长上下移动

Propagation.REQUIRES_NEW