C# 마우스로 폼이동하기

WindowsFormsApp1.zip

전체 소스파일입니다


폼을 두개 생성합니다

Form1  - 메인폼이죠 기본생성되는 폼

MoveForm - 폼을 움직일때 테두리를 표시해 주기 위한 폼 


MoveForm 에 패널을 하나 넣고 

<<MoveForm 설정하기>>

this.BackColor = System.Drawing.Color.DarkSlateGray; // MoveForm 배경을 빨강이 아닌 아무색이나 변경. 테두리로 보일 색입니다

this.panel1.BackColor = System.Drawing.Color.Red; // panel1 배경을 빨강으로 설정합니다

this.panel1.Location = new System.Drawing.Point(6, 6); // Location을 6,6으로 설정합니다

this.panel1.Size = new System.Drawing.Size(848, 452); // MoveForm 크기보다 12,12 작게 설정합니다

this.TransparencyKey = System.Drawing.Color.Red; //MoveForm 투명색깔을 빨강으로 설정합니다


// panel1 의 Anchor를 Top,Bottom,Left,Right 모두다 설정해 줍니다

this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 

            | System.Windows.Forms.AnchorStyles.Left) 

            | System.Windows.Forms.AnchorStyles.Right)));


<<Form1 설정하기>> 

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; // FormBorderStyle을 None로 설정


<<Form1 코드 넣기>> 

MoveForm moveForm = new MoveForm();

int GapX, GapY;


public Form1()

{

    InitializeComponent();

}


private void Form1_MouseDown(object sender, MouseEventArgs e)

{

// 마우스를 누르면 

     GapX = Cursor.Position.X - this.Location.X;    // Form1 과 마우스의 위치차이를 저장

     GapY = Cursor.Position.Y - this.Location.Y;    // Form1 과 마우스의 위치차이를 저장


// MoveForm의 사이즈를  Form1과 동일하기 설정

     moveForm.Size = new Size(this.Width, this.Height);    


// MoveForm의 위치를 Form1의 위치와 동일하기

     moveForm.Location = new Point(Cursor.Position.X - GapX, Cursor.Position.Y - GapY); 


// MoveForm를 보입니다

     moveForm.Show();

}


private void Form1_MouseUp(object sender, MouseEventArgs e)

{

// 마우스를 떼면 Form1의 위치를 변경하고 MoveForm 는 보이지 않게 합니다

    this.Location = new Point(moveForm.Location.X, moveForm.Location.Y); 

    moveForm.Hide();

}


private void Form1_MouseMove(object sender, MouseEventArgs e)

{

    // 마우스를 움직이면 MoveForm의 위치를 움직여서 Form1이 옮겨질 위치를 알수있게 합니다

    moveForm.Location = new Point(Cursor.Position.X - GapX, Cursor.Position.Y - GapY); 

}