Компонент (примечание) перетаскивание на пианино посох - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть Picturebox, который пользователь может перетаскивать вверх или вниз. PictureBox представляет собой заметку о пианино. Когда примечание перемещается вверх или вниз, положение примечания должно измениться относительно линий штата. Следовательно, позиции могут быть ТОЛЬКО перемещены в фиксированные позиции (значения Y). Таким образом, когда пользователь перемещает заметку по вертикали, она не должна быть размещена где-либо, а только в указанных позициях (продиктованных инструкциями if).

Проблема в том, что пользователь может переместить компонент PictureBox (музыкальная нота) вниз, но когда объект перетаскивается, ничего не происходит. Класс наследуется от PictureBox.

Я просто хотел бы подчеркнуть, что PictureBox работает при перетаскивании вниз, но не перемещается при перетаскивании вверх. Перетаскивание выполняется с интервалами, т. Е. PictureBox может быть размещен только в определенных местах (следовательно, необходимы конкретные координаты).

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Ваш код не выполняется, потому что оператор if при перемещении вверх включает текущую позицию.Например, когда this.Top равен 138 и мышь переместилась вверх, вы попадете в оператор if: else if (this.Top < 148 && this.Top >= 138), который установит вершину на 138, какой она уже была.Вы должны переместить знак = на другую сторону следующим образом: if (this.Top <= 148 && this.Top > 138).

0 голосов
/ 21 декабря 2011

Вместо того чтобы использовать множество операторов if, создающих список разрешенных координат Y, затем всякий раз, когда нота перемещается, выполняйте итерацию по списку, пока не найдете ближайшую разрешенную координату и не переместитесь туда.Примерно так:

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

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