정리가 필요한 카테고리(추후 정리)/C#,Unity

윈폼(Winform)에서 폼보더스타일(FormBorderStyle)이 None일 때, 폼 드래그 구현

TwinParadox 2018. 12. 23. 21:02
728x90

윈폼에서 폼보더스타일이 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을 조정하는 방식으로 진행한다.

728x90