C# 마우스 드래그 이벤트로 폼 이동하기

Wookoa 2024. 9. 4.

C# 마우스 드래그 이벤트로 폼 이동하기
C# 마우스 드래그 이벤트로 폼 이동하기

머리말

  C# 개발환경에서 프로그램을 개발하던 중 타이틀 영역이 아닌 다른 영역을 드래그할 때에도 윈도우 폼이 움직이는 기능이 필요했다. 본 포스팅에서는 C# 언어에서 드래그로 폼을 이동시키는 방법에 대해서 설명하는데, 불 필요한 전역 변수는 사용하지 않고 구현하는 방법을 소개한다.

마우스 드래그로 폼 이동하기

  본인의 경우 윈도우 폼의 타이틀 영역을 비활성화 처리한 뒤 모든 영역을 드래그했을 때 폼이 이동시키도록 개발을 진행하고 있었다. 그렇기 때문에 메인 폼에 MouseDown, MouseMove 두 개의 이벤트만 사용해서 구현했으며 아래와 같이 설정했다.

MouseDown, MouseMove 이벤트 추가
MouseDown, MouseMove 이벤트 추가

  추가된 각 이벤트에 각각 기능을 코딩해 주면 되는데, MouseDown 이벤트에는 현재 마우스의 좌표를 저장하는 기능과 MouseMove 이벤트에는 현재 마우스 좌표를 적절히 계산해서 폼의 좌표로 지정하는 기능이 전부다. 화면의 좌표를 산출하는 계산식은 다양하게 존재하지만, 본 포스팅에서 소개하는 방법은 마우스를 처음 클릭했을 때의 좌표와 드래그한 마우스의 좌표를 상대적으로 계산해서 폼의 좌표를 지정하는 방법으로 소개했다. 예제 코드는 아래와 같이 매우 간단하다.

using System.Drawing;
using System.Windows.Forms;

namespace Wookoa
{
    public partial class Form1 : Form
    {
        private Point point = new Point();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            point = new Point(e.X, e.Y);
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
            {
                this.Location = new Point(this.Left - (point.X - e.X), this.Top - (point.Y - e.Y));
            }
        }
    }
}

꼬리말

  프로그램이 무거워질수록 전역변수에 대한 고찰이 가중된다. 가능하면 전역 변수를 사용하지 않고 연산 로직으로 해결하도록 소스를 고도화한다. 본 포스팅에서 설명하는 방법은 마우스 클릭 여부를 판별하기 위해 전역 변수를 선언할 필요 없이, MouseMove 이벤트에서 왼쪽 마우스 클릭 여부를 직접 확인하도록 설명했다. 그렇기 때문에 비교적 간결한 소스로 해당 기능을 구현할 수 있다. C# 언어에서 윈도우 폼을 마우스 드래그 이벤트로 이동하는 방법에 대해서 소개한 본 포스팅은 이로써 마무리를 짓도록 한다.

인기있는 글

소중한 댓글 (0)