윈폼에서 폼보더스타일이 None이면 상단에 있는 제목 표시줄이 사라지면서, 폼을 마우스로 드래그해서 옮길 수 없다. 그렇다고 다른 옵션을 선택하기에는 원하는 디자인을 만들 수 없기 때문에 None 옵션을 유지하면서 마우스 드래그 기능을 추가해야 하는데, 간단하게 해결할 수 있다.
MouseDown과 MouseMove 이벤트를 이용해서 드래그 기능을 구현할 수 있다.
private void MainForm_MouseDown(object sender, MouseEventArgs e) { mousePoint = new Point(e.X, e.Y); } private void MainForm_MouseMove(object sender, MouseEventArgs e) { if ((e.Button & MouseButtons.Left) == MouseButtons.Left) { this.Location = new Point(this.Left - (mousePoint.X - e.X), this.Top - (mousePoint.Y - e.Y)); } }
최초로 마우스 좌클릭이 발생한 시점을 Point 객체에 담아두고 마우스 커서가 움직이는 동안 마우스 커서의 이동 거리를 계산해서 계속 폼의 Location을 바꿔주는 방식으로 동작한다. 간단하게 구현해본 것으로 더 좋은 방법이 있다면, 그 방법을 사용해도 좋겠다.
마우스 커서의 변위(이 표현이 적당한지 모르겠다.)를 mousePoint가 가진 X와 Y값은 이벤트 발생 시 생긴 X와 Y값의 차이를 이용해 계산하고 그 변화량을 폼의 Left, Top을 조정하는 방식으로 진행한다.
'정리가 필요한 카테고리(추후 정리) > C#,Unity' 카테고리의 다른 글
C#] 델리게이트(Delegate)의 호환성 (0) | 2019.02.05 |
---|---|
WPF, 윈폼] 마우스 커서 위치에 있는 픽셀의 색상값(RGB) 구하는 방법 (1) | 2019.02.02 |
Unity 주요 함수 정리 (0) | 2018.07.14 |
C#] Thread.Sleep 대신 사용할 Delay 함수 (0) | 2018.07.12 |
C#] Parallel 클래스를 이용한 병렬 프로그래밍 (0) | 2018.05.31 |