2011-12-21 1 views
0

필자는 그림 상자를 가지고 있는데, 사용자는 위 또는 아래로 끌 수 있습니다. PictureBox는 피아노 직원의 메모를 나타냅니다. 노트를 위 또는 아래로 움직이면 노트의 위치는 스태프 라인을 기준으로 변경됩니다. 따라서 위치는 고정 된 위치 (Y 값)로만 이동할 수 있습니다. 따라서 사용자가 메모를 세로로 이동하면 특정 위치 (if 문으로 지정)에만 배치 할 수 있습니다.피아노 직원에게 끌리는 구성 요소 (참고)

사용자가 PictureBox (음악 참고) 구성 요소를 아래로 이동할 수 있지만 개체를 ​​끌면 아무 일도 일어나지 않는 것이 문제입니다. 이 클래스는 PictureBox에서 상속받습니다.

PictureBox가 아래로 끌 때 작동하지만 위쪽으로 끌면 움직이지 않는다는 점을 강조하고 싶습니다. 드래그는 간격으로 수행됩니다. 즉, PictureBox는 특정 위치에만 배치 될 수 있습니다 (따라서 특정 좌표에 대한 필요성).

답변

1

위로 이동하는 if 문에 현재 위치가 포함되어 있기 때문에 코드가 실패합니다. 예를 들어 this.Top이 138이고 마우스가 위로 움직이면 this if 문을 누르게됩니다 : else if (this.Top < 148 && this.Top >= 138) 이것은 맨 위에 138를 설정합니다. = 부호를 if (this.Top <= 148 && this.Top > 138)과 같이 다른 쪽으로 이동해야합니다.

+0

고마워요, 이것이 제 문제였습니다! –

0

많은 if 문을 사용하는 대신 허용되는 Y 좌표 목록을 만들고, 메모가 움직일 때마다 가장 가까운 허용 좌표를 찾아 이동할 때까지 목록을 반복합니다. 아래처럼 :

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

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

감사합니다. 그러나 이것은 내 문제가 아닙니다. –

+0

그 다음은 무엇입니까? 나는 당신이하려는 일을하도록 해줄 답을 당신에게주었습니다. –

+0

노트 이동 중. 내가 말했듯이, 노트는 아래로 움직일 때 작동하지만, 올라가지는 않습니다. 그래서 PictureBox와 관련이 있습니다. if 문은 지금은 임시적입니다. –

관련 문제