组件(注释)拖动钢琴工作人员

时间:2011-12-21 08:52:42

标签: c# .net winforms picturebox

我有一个Picturebox,用户可以向上或向下拖动。 PictureBox代表钢琴工作人员的笔记。当音符向上或向下移动时,音符的位置将相对于谱线改变。因此,位置只能移动到固定位置(Y值)。因此,当用户垂直移动音符时,它不应放在任何地方,而应放在指定的位置(由if语句决定)。

问题是用户能够向下移动PictureBox(音符)组件,但是当拖动对象时,没有任何反应。该类继承自PictureBox。

我只想强调PictureBox在向下拖动时有效,但在向上拖动时不会移动。拖动是间隔完成的,即PictureBox只能放置在某些位置(因此需要特定的坐标)。

2 个答案:

答案 0 :(得分:1)

您的代码失败,因为向上移动时的if语句包含当前位置。例如,当.Top为138并且鼠标向上移动时,你将点击这个if语句:else if (this.Top < 148 && this.Top >= 138),它将顶部设置为138,它已经是。您应该将=符号移到另一边:if (this.Top <= 148 && this.Top > 138)

答案 1 :(得分:0)

而不是使用大量的if语句创建允许的Y坐标列表,然后每当笔记移动时,迭代列表直到找到最近的允许坐标并移动到那里。如下所示:

List<int> AllowedYs;
// TODO: Add coordinates to your list

var FinalY = AllowedYs.OrderBy(y => Math.Abs(y - e.Y)).First();