[C#] 사용자 컨트롤 드래깅

사용해 보지 않았던 기술을 익혀보고자 여기저기 뒤적 거리던중 발견한 드래깅 기법이다. 우선 메인 폼과 사용자 컨트롤을 준비한다. 그리고 사용자 컨트롤 에 다음과 같은 3개의 이벤트를 지정한다. (그냥 더블클릭하면 된다.) 1. MouseDown은 컨트롤위에서 마우스 버튼을 누른상태일때 기능을 수행하도록 한다. 2. MouseMove는 컨트롤 위에서 마우스가 움직일때 기능을 수행하도록 한다. 3. MouseUp은 마우스 버튼을 땠을때 기능을 수행한다. 그리고 다음과 같은 코드를 기술하게 되는데... [원본 소스] 각 항목을 설명하면 다음과 같다. ⓐ : 해당 컨트롤이 드래깅 중인지 아닌지 상태를 저장한다. ⓑ : 드래그를 하기위해 컨트롤에서 MouseDown 했을때, 마우스의 좌표를 저장한다. (소스의 ① 영역에서는 위 그림처럼 사용자 컨트롤을 기준으로 좌표가 저장된다.) ① MouseDown 본 컨트롤이 드래깅 중임을 설정하여, MouseMove 이벤트에서 위치값을 재계산 할 수 있도록 한다. 그리고 사용자 컨트롤내의 마우스 좌표값을 저장한다. ② MouseMove MouseDown에서 드래깅 상태로 지정되었으면, 사용자 컨트롤의 위치를 재계산 한다. (위 그림에서 드래깅을 수행하는 경우...) 소스상에서 this 는 사용자 컨트롤이다. 그리고 this.Left 및 this.Top은 현재 컨트롤이 부모 컨트롤의 좌상단 구석에서 몇 픽셀만큼 떨어져 있는지에 대한 정보를 읽어올 수 있으며, 반대로 설정할 수 도 있다. 회색 사각형 영역은 e.X + this.Left 와 e.Y + this.Top 까지만 적용한 경우에 위치하는 곳을 알려준다. 이런 경우 드래그 하는 대상의 좌상단이 항상 마우스 커서를 따라다니게 된다. 만약 사용자가 클릭한 위치를 기준으로 드래깅을 하고 싶다면 위의 소...