글 작성자: Doublsb

개인적인 용도로 메모용의 카운터가 필요했는데, 가볍고 작게 만들어진 프로그램이 없어서 직접 만들기로 했다.

아래는 실제 구현된 결과이다.

 


필요 기능 정리

바탕화면에 둘 수 있는 작고 간편한 카운터를 원했기 때문에, 다음 기준을 만족시켜야 했다.

 

- 좌클릭하면 증가

- 우클릭하면 감소

- 0으로 리셋 가능

- 원하는 숫자로 설정 가능

- 프로그램을 종료했을 때에도 마지막 숫자를 가져올 것


구현

윈도우 폼으로 구현했다. 간편하게 GUI 환경에서 프로그램을 만들 수 있어서 선호한다.

위쪽으로 Label을 배치하고, 아래에는 작은 pictureBox를 달았다.

pictureBox를 눌렀을 때 메뉴가 뜰 수 있도록 contextMenuStrip을 배치했다.

 

Reset을 클릭하면 카운터가 0이 되도록 메서드를 연결하고, Set에는 Dialog Form을 연동했다.

 

그렇다. 별로 설명할 것도 없다.


구현하는 중 겪은 문제들


1. 마우스 클릭에 딜레이가 생기는 문제

MouseClick에만 메서드를 할당했더니, 두 번 빠르게 클릭했을 때 카운터가 올라가지 않았다.

이유는 MouseDoubleClick이 호출되기 때문이었다. 아니...

 

그래서 MouseClick이랑 MouseDoubleClick 모두에 메서드를 할당했더니 딜레이가 없어졌다 껄껄

 


2. 폼 콜백 설정하기

Form.ShowDialog()를 이용하면,

새로 표시된 폼이 닫히기 전에는 이전 폼에서 조작을 할 수 없다는 사실은 알고 있었지만, 이번에 사용해보니 더 많은 이점이 있었다.

 

ShowDialog()의 이점은 폼을 대화상자처럼 이용할 수 있다는 것이다.

 

ShowDialog는 자식 폼의 결과가 전달되기 전까지 부모 폼을 정지시킨다.

이로 인해 콜백을 사용할 수 있다. 자식 폼의 리턴 결과는 DialogResult로 전달되며, 이에 따라 코딩을 할 수 있다.

 

처음에는 Form2의 메서드에 Form1의 인스턴스를 연결시키려고 별 짓을 다 했는데 그럴 필요가 없었던 것이다.

 

이런 식으로 this.DialogResult에 결과만 연결해주면 끝.

 


3. 폼 열었을 때 Textbox focus하기

폼 Load 메서드에 textbox.Focus()만 연결해주면 되는 줄 알았는데, 한 가지를 더 해야 했다.

 

this.ActiveControl에 먼저 컨트롤을 할당해주어야만 Focus가 가능했다.

 


4. 레지스트리 읽고 쓰기

C# Winform에서 레지스트리를 사용해본 적은 처음이라, 이래저래 많이 찾았다.

 

- Microsoft.Win32 네임스페이스를 사용할 것

- 비주얼 스튜디오를 관리자 권한으로 실행해야 함 (혹은 권한 부여)

 

두번째를 찾느라 조금 고통받았다. LocalMachine에 접근하려면 IDE인 비주얼 스튜디오에 권한을 할당해야 했던 것.


간단한 프로그램이지만 아무튼 완성했으니, 잘 써야겠다.

반응형