본문 바로가기

개발새발 개발자/C#

[C# GUI 프로그래밍] 텍스트 박스와 리스트 박스

텍스트 박스와 리스트 박스의 기능


- 텍스트 박스

값을 입력 받는 GUI 컨트롤. String으로 값을 받고 필요한 형태로 리턴한다.


- 리스트 박스

목록을 출력하는 GUI 컨트롤. 출력할 값을 추가 및 제거하는 기능을 활용한다.



텍스트 박스 사용법

텍스트 박스는 텍스트를 입력할 수 있으며 수정이 가능하다. 여러 줄로 입력하고 싶으면 상자에서 옆으로 누운 세모 버튼을 클릭하면 된다.


- 값을 입력 받아 읽어오기

string TextBox.Text

- 받아온 값을 숫자로 바꾸기

double Convert.ToDouble(TextBox.Text)

- TextBox에 값 쓰기

TextBox.Text="넣을 문자열"


텍스트 박스 사용 예제

Source에 쓴 값을 Target으로 저장하는 예제


받은 값과 연산자로 계산을 수행하는 예제



리스트 박스 사용법

리스트 박스는 목록을 나열하기 위한 GUI 컨트롤이다. 리스트 박스를 굳이 언급하는 이유는 목록 나열 때문이 아니라 글자를 썼다 지워는 것을 어떻게 적절한 시점에 처리해야 하는지 공부하기 위함이다.


- Dock

이 폼에 리스트 박슬르 어떻게 결합(docking)할 것인지 결정한다. fill을 체크하면 리스트 박스가 폼 전체에 퍼진다.


- MultiColumn

true를 체크하면 column(열) 즉, 오른쪽으로 text가 이동하면서 써진다. 리스트 박스는 기본적으로 행을 바꿔가며 목록을 나열하게 되어있지만, MultiColumn을 체크하면 오른쪽으로도 목록을 나열할 수 있게 된다.



- 키보드 입력 값 추가

ListsBox.Items.Add(Keys)

Keys는 키보드 입력값을 바을 때 쓰는 parameter이다.


- 리스트 박스 안에 있는 글자 수 체크

ListsBox.Items.Count

리스트 박스는 복수 개의 자료가 들어갈 수 있기 때문에 몇 개의 자료가 현재 Add되었는지, Add가 몇 번 되었는지 카운트 하는 Count가 있다.


- 리스트 박스 내 특정 글자 삭제

ListsBox.Items.Remove(Keys)

리스트 박스에는 여러 개의 자료들이 쭉 들어가 있기 때문에 특정 자료를 삭제하려면 Remove를 사용한다.

만약 Add로 리스트 박스에 3을 저장했다고 하자. Remove(3)을 입력하면 저장했던 3을 삭제해준다.


- 전체 삭제

ListsBox.Items.Clear()



리스트 박스 예제

타이핑을 하면 ListBoxShowLetter에 출력하고, TextBoxLetterRemoved에 삭제하고 싶은 글자를 입력하면 ListBoxShowLetter에서 삭제된다.



키보드 입력 처리 - 1. 리스트 박스

form을 추가하고 그 안에 리스트 박스와 텍스트 박스를 각각 집어 넣고 Name을 설정한다.


- 키보드 입력 처리 순서

1. 개별 컨트롤 말고 form 자체를 선택하면 KeyPreview가 보인다. 속성을 True로 바꾸면 타이핑한 내용을 사용할 수 있게 된다.

2. KeyDown 값을 입력한다. KeyDown은 키가 눌리면 이벤트를 발생시킨다. 이 항목을 더블클릭 하면 해당 form에 대한 이벤트 처리 메서드 코드가 생긴다.


- 이벤트 처리 과정

키보드 입력 -> form으로 이동 -> 이벤트 발생 -> 이벤트 메소드에 키보드 입력값을 KeyEventArgs e로 전달



키보드 입력 처리 - 2. 텍스트 박스


텍스트 박스에 문자를 입력하면 문제가 있다. 키보드 입력 시 두 가지 이벤트가 발생한다.


1. 텍스트 박스에 글자가 입력되는 이벤트

2. 폼에 키보드가 눌리는 이벤트


폼이 텍스트 박스 상위에 있어 이벤트가 같이 발생한다. 따라서 텍스트 박스에 글자를 쓰면 리스트 박스에도 똑같이 출력이 되는 문제가 있다. 


private void textBoxLetterRemoved_KeyDown(object sender, KeyEventArgs e)    // 텍스트 박스에 글자가 입력되면 { listBoxShowLetter.Items.Remove((Keys)e.KeyCode);        // 리스트 박스에서 삭제해라 }

따라서 TextBox에 KeyDown에 대한 이벤트를 따로 처리해줘야 한다. 이벤트가 발생하면 ListBox에 표시되는 글자를 지우는 것이다.