본문 바로가기
Computer Science/Etc.

Microsoft Visual Studio 2019로 C# Windows Forms 만들기(2) 마우스 포인터 위치 가져오기-2

by hzyiunn 2022. 4. 1.
728x90
반응형

2022.04.01 - [Computer Science] - Microsoft Visual Studio 2019로 C# Windows Forms 만들기(1) 마우스 포인터 위치 가져오기-1

 

Microsoft Visual Studio 2019로 C# Windows Forms 만들기(1) 마우스 포인터 위치 가져오기-1

모니터 마우스 포인터 위치 값을 가져오는 코드를 찾아보다가 C#까지 오게 되어버려서 기록을 남겨본다. 우선 Visual Studio를 켜서 새 프로젝트 만들기(N)를 누른다. 새 프로젝트를 만들면 이렇게

hzyiunn.tistory.com


이번에는 라벨을 만들어 마우스의 좌표값을 가져오는 폼을 만들어보려고 한다.

도구 상자에 있는 Label을 찾아 마우스로 드래그 한다.

만약 도구 상자가 없으면 Ctrl+Alt+x 을 누르면 도구상자가 나온다. 자주 쓸테니 상단에 고정 표시를 눌러 고정해놓자.

라벨의 이름을 변경할 차례!

오른쪽 하단에 있는 속성에서 Text를 찾아 원하는 이름으로 바꿔준다.

이제 각 라벨에 필요한 값을 가져와야한다.

때문에 각 라벨 옆에 x,y 좌표를 띄우기 위해 똑같은 라벨을 복사해서 옆에 붙여준다.

그 후 오른쪽 하단에 있는 속성 탭에 보이는 번개 모양의 이벤트 버튼을 눌러 Load를 클릭한다.

각 이벤트는 마우스의 커서가 움직일 때의 좌표를 보여주는 것이기 때문에 속성에서 MouseMove도 더블클릭해서 추가한다.

여기서 값을 보여줄 라벨(위에 있는 사진 속에 오른쪽에 있는 '마우스 X 좌표'와 '마우스 Y좌표') 속성의

디자인 Name을 확인한다. 확인 방법은 조금 전에 클릭했던 번개 모양의 이벤트 왼쪽에 있는 속성 버튼을 누르면 된다.

내 프로그램에서는 라벨 이름이 Label4와 Label3으로 되어있어 이해하기 쉽도록 라벨 이름을 수정했다.

라벨 이름을 확인한 이유는 아까 클릭한 이벤트인 MouseMove 코드에 필요하기 때문이다.

PosX.Text = Cursor.Position.X.ToString();

이렇게 코드를 적는다. 내 폼에서 오른쪽 상단에 텍스트로 나타낼 값은 커서의 X 위치를 string으로 보여준다는 뜻이다.

마찬가지로 Y 좌표도 적는다.

PosY.Text = Cursor.Position.Y.ToString();

마지막으로 마우스 커서의 움직임 값을 실시간으로 가져오기 위해 폼 화면으로 돌아가 도구에서 Timer 를 드래그한다.

그냥 그대로 사용해도 되지만, 나는 코드를 알아보기 쉽게 Name을 바꿨다.

그리고 다시 코드로 돌아가 Load 부분을 작성한다.

그러기 위해서는 우선 상단에 

using System.Timers;

를 추가한다. Timers는 Elapsed 속성의 밀리초 수가 경과 된 후 응용 프로그램에서 이벤트를 발생 시키는 서버 기반 타이머로 특정한 작업을 주기적으로 실행시키기 위해 사용하는 객체이다.

private void Form1_Load(object sender, EventArgs e)
        {
            PosTimer.Start();
            PosTimer.Interval = 1;
        }

 

실행하면 폼 창이 뜨며 폼 내에서 움직이는 마우스의 좌표를 실시간으로 가져온다.

전체 코드는 다음과 같다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Timers;

namespace HelloWorld
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            PosTimer.Start();
            PosTimer.Interval = 1;
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            PosX.Text = Cursor.Position.X.ToString();
            PosY.Text = Cursor.Position.Y.ToString();
        }
    }
}
728x90
반응형

댓글