06
16

1) 버튼 기반 컨트롤

컨트롤 : 화면에 표시되어 사용자와 상호작용을 수행하는 컴포넌트이며 종류에는 버튼, 레이블, 텍스트, 리스트가 있다

  • 버튼 기반 컨트롤 : 버튼, 체크 상자, 라디오 버튼
  • 레이블 컨트롤 : 레이블, 링크 레이블
  • 텍스트 컨트롤 : 텍스트 상자
  • 리스트 컨트롤 : 리스트 상자, 콤보 상자, 체크리스트 상자

버튼 기반 컨트롤은 ButtonBase 추상 클래스를 상속받은 컨트롤을 의미한다. 종류로는 버튼, 체크 상자, 라디오 버튼이 있다.

 

1.1) 버튼

사용자 입력을 받는 가장 간단한 방법으로 버튼을 클릭함으로써 이벤트를 발생

 

버튼의 프로퍼티 : 이름과 글자색등을 설정할 수 있음

프로퍼티 설명
Text  버튼 이름을 설정
Font  버튼 이름에 해당하는 문자열의 글꼴을 설정
ForeColor  버튼 이름에 해당한느 문자열의 색상을 설정
TextAlign  버튼 이름에 해당하는 문자열을 정렬
FlatStyle  버튼의 스타일(모양)을 설정
Size  버튼의 크기(픽셀 단위)를 설정
BackColor  버튼의 배경색을 설정
BackgroundImage  버튼의 배경 이미지를 설정
Image  버튼 형태 위에 이미지를 설정
ImageAlign  버튼 형태 위에 이미지를 정렬

 

버튼의 스타일

  • 버튼의 스타일을 설정하기 위해서 FlatStyle 프로퍼티를 지정해야 함
  • System.Windows.Forms 네임스페이스에 포함되어 있음

버튼의 종류

 

ex)

private void BtnFlat_Click(object sender, EventArgs e)
{
	LblButtonStyle.Text = FlatStyle.Flat.ToString();
}

private void BtnPopup_Click(object sender, EventArgs e)
{
	LblButtonStyle.Text = FlatStyle.Popup.ToString();
}

private void BtnStandard_Click(object sender, EventArgs e)
{
	LblButtonStyle.Text = FlatStyle.Standard.ToString();
}

private void BtnSystem_Click(object sender, EventArgs e)
{
	LblButtonStyle.Text = FlatStyle.System.ToString();
}

private void MainForm_Load(object sender, EventArgs e)
{
	LblButtonStyle.Text = "결과표시";
}

 

예제 실행 화면

 

2) 체크상자

체크 상자는 주어진 항목들 중에서 선택할 수 있는 컨트롤로 주어진 항목을 복수로 선택할 수 있다.

 

체크상자의 프로퍼티

  • Control 클래스를 상속받은 컨트롤이기 때문에 버튼과 대부분 동일
  • 체크 상자의 체크 상태를 나타내는 Checked 프로퍼티가 추가로 제공

Checked 프로퍼티

  • 참으로 설정하면 네모 부분에 체크 표시
  • Checked 프로퍼티의 값이 변경될 때마다 CheckedChanged 이벤트 발생

ex)

private void UpdateLabel()
{
	string strchk1 = "", strchk2 = "", strchk3 = "", strchk4 = "";
	if(checkBox1.Checked == true)
	{
		strchk1 = checkBox1.Text;
	}
	else
	{
		strchk1 = "";
	}

	if (checkBox2.Checked == true)
	{
		strchk2 = checkBox2.Text;
	}
	else
	{
		strchk2 = "";
	}

	if (checkBox3.Checked == true)
	{
		strchk3 = checkBox3.Text;
	}
	else
	{
		strchk3 = "";
	}

	if (checkBox4.Checked == true)
	{
		strchk4 = checkBox4.Text;
 	}
 	else
	{
		strchk4 = "";
	}
	
    label1.Text = (strchk1 + " " + strchk2 + " " + strchk3 + " " + strchk4).Replace("  ", " ");
}

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
	UpdateLabel();
}

private void checkBox3_CheckedChanged(object sender, EventArgs e)
{
	UpdateLabel();
}

private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
	UpdateLabel();
}

private void checkBox4_CheckedChanged(object sender, EventArgs e)
{
	UpdateLabel();
}

private void Form1_Load(object sender, EventArgs e)
{
	label1.Text = "좋아하는 과일 : ";
}

 

예제 실행 화면

 

3) 라디오 버튼

라디오 버튼은 주어진 항목들 중에서 오직 한 개만을 선택할 수 있는 컨트롤로 라디오 버튼의 프로퍼티는 체크 상자와 동일하다

 

ex)

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
	label1.Text = radioButton1.Text;
}

private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
	label1.Text = radioButton2.Text;
}

private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
	label1.Text = radioButton3.Text;
}

private void radioButton4_CheckedChanged(object sender, EventArgs e)
{
	label1.Text = radioButton4.Text;
}

private void Form1_Load(object sender, EventArgs e)
{
	label1.Text = string.Empty;
}

 

예제 실행 화면

 

4) 레이블

레이블은 각종 정보를 폼에 표시할 때 사용하는 컨트롤로 폼에 있는 컨트롤을 식별하는 정보를 표시하거나 애플리케이션의 실행에 대한 응답 정보를 표시하거나 특정 컨트롤을 클릭했을 때 실행되는 작업을 설명하는 메시지를 표시하는 데 사용된다.

 

4.1) 레이블의 프로퍼티 : Font, BorderStyle, TextAlign

 

 

BorderStyle : 레이블의 테두리를 설정할 때 사용하는 프로퍼티

기호상수 순서 값 설명
None 0 테두리가 없음
FixedSingle 1 단일 선 테두리
Fixed3D 2 3차원 테두리

 

TextAlign : 레이블과 같은 컨트롤에서 표시되는 문자열에 대한 정렬을 위한 프로퍼티

System.Drawing 네임스페이스에 포함된 ContentAlignment 열거형을 사용하여 지정할 수 있음

기호상수 순서 값 설명
TopLeft 0x0001 좌측 상단 정렬
TopCenter 0x0002 가운데 상단 정렬
TopRight 0x0004 우측 상단 정렬
MiddleLeft 0x0010 좌측 중앙 정렬
MiddleCenter 0x0020 가운데 중앙 정렬
MiddleRight 0x0040 우측 중앙 정렬
BottomLeft 0x0100 좌측 하단 정렬
BottomCenter 0x0200 가운데 하단 정렬
BottomRight 0x0400 우측 중앙 정렬

 

각각 정렬된 레이블

 

5) 링크 레이블

링크 레이블은 하이퍼 링크(hyper link)를 설정할 수 있는 레이블 컨트롤로 레이블 컨트롤을 상속받았기 때문에 레이블의 기본적인 기능을 가지고 있다. 링크 레이블은 링크를 클릭했을 때 발생하는 LickClicked 이벤트에 대한 이벤트 처리기를 작성한다.(이벤트 처리를 위해서는 Process 클래스의 정적 메서드인 Start() 메서드를 사용한다.)

 

ex)

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
	Process.Start(linkLabel1.Text);
}

 

예제 실행 화면

 

cf. C# Prefix / C# 코딩: Naming Convention 

Control Prefix Control Prefix
Label lbl ProgressBar pbr
TextBox txt ComboBox cbo
DataGrid dtg CommandButton cmd
Button btn CommonDialog dlg
Hypelink hlk Control ctl
DropDownList ddl Slider sld
ListBox lst Timer tmr
DataList dtl DBList dst
Repeater rep DBCombo dcbo
CheckBox chk DBGrid dgrd
CheckBoxList cbl DirectoryListBox dir
RadioButton rdo DriveListBox drv
RadioButtonList rbl FileListBox fil
Image img Frame fra
Panel pnl TreeView tvw
PlaceHolder phd ToolBar tbr
Table tbl Menu mnu
Vaildators val StatusBar sbr

 

cf. 카멜 표기법(Camel case), 파스칼 표기법(Pascal case), 팟홀 표기법(Pothole case)

  • 카멜 표기법 : 낙타의 등과 비슷한 형태이며 기본적으로 변수명을 모두 소문자로 쓴다. 다만 여러 단어가 이어지는 경우 첫 단어를 제외하고 각 단어의 첫 글자만 대문자로 지정해주는 방식이다. ex) int myFirstVariable;
  • 파스칼 표기법 : 파스칼 표기법은 첫 단어의 첫 번째 글자도 대문자로 선언해야 한다. 그 외에는 카멜 표기법과 동일하다. ex) int MyFirstVariable;
  • 팟홀 표기법 : 팟홀은 움푹 파인 곳이라는 의미로 아래로 내려서 표기해준다. 아래로 내리는 방법은 밑줄(underbar)을 사용하는 것이다. 문자는 모두 소문자로 표기한다. ex) int my_first_variable;

 

6) 텍스트 상자

사용자가 직접 텍스트를 입력할 수 있는 기본적인 컨트롤로서 사용자로부터 값을 입력받거나 애플리케이션의 실행 결과를 출력하고자 할 때 유용하게 사용할 수 있다

 

텍스트 상자의 프로퍼티

프로퍼티 설명
MaxLength  텍스트 상자에 입력할 수 있는 최대 문자 수를 설정
Multiline  텍스트 상자의 영역을 여러 줄로 설정
PasswordChar  텍스트 상자의 암호 입력에 사용할 문자를 설정
ReadOnly  텍스트 상자의 텍스트를 변경하지 못하도록 설정
WordWrap  텍스트 상자의 텍스트가 영역을 초과할 경우 자동으로 줄을 바꾸도록 설정
ScrollBars  Multiline 프로퍼티가 참인 경우 텍스트 상자에 스크롤 바를 설정
 (None | Horizontal | Vertical | Both)

 

ex)

private void button1_Click(object sender, EventArgs e)
{
	textBox3.Text = $"ID : {textBox1.Text}\r\nPassword : {textBox2.Text}";

	if(textBox1.Text.ToUpper() == "ADMIN" && textBox2.Text.ToUpper() == "P@SSW0RD!")
	{
		MessageBox.Show("관리자 로그인");
	}
}

 

예제 실행 화면

 

7) 리스트

리스트 기반 컨트롤 : ListControl 클래스를 상속받은 컨트롤을 가리키며 리스트 상자, 콤보 상자, 체크리스트 상자가 있다.

 

7.1) 리스트 상자

사용자가 선택할 수 있는 항목들의 목록을 표시해주는 컨트롤

 

리스트 상자의 프로퍼티

프로퍼티 설명
Item  리스트 상자의 항목을 설멍
MultiColumn  리스트 상자가 여러 열을 표시할 수 있도록 설정
ScrollAlwaysVisible  항상 세로 스크롤바가 표시되도록 설정
SelectionMode  리스트 상자에서 항목을 선택하는 방법을 설정
SelectionIndex  리스트 상자에서 현재 선택된 아이템이 인덱스를 반환(0부터 시작)
SelectionItem  리스트 상자에서 현재 선택된 아이템을 반환

 

리스트 상자의 항목을 선택하는 방법 : SelectionMode 프로퍼티 값에 따라 변경

기호상수 설명
None  항목을 선택할 수 없음
One  하나의 항목만 선택할 수 있음
MultiSimple  여러 항목을 선택할 수 있음
MultiExtented  여러 항목을 선택할 수 있으며, <shift>, <ctrl>, 마우스 포인터를 이용해 선택할 수 있음

 

ObjectCollection 클래스의 메서드

메서드 설명
Add(object item)  리스트 상자에 항목을 추가한다.
Clear()  리스트 상자의 모든 항목을 제거한다.
FindString(string s, int index)  리스트 상자의 항목 중 지정된 인덱스 다음부터 지정된 문자열로 시작하는 항목의 인덱스를 반환한다.
IndexOf(object item)  지정한 항목의 인덱스를 반환한다.
Insert(int index, object item)  지정된 인덱스에 항목을 추가한다.
Remove(object item)  지정된 항목을 제거한다.
RemoveAt(int index)  지정된 인덱스의 항목을 제거한다.

 

7.2) 콤보 상자

사용자가 상자를 클릭하면 목록이 나타나는 드롭다운(drop-down) 형식의  컨트롤이다. 콤보 상자의 항목은 Items 프로퍼티를 통하여 추가 및 삭제가 가능하다.

 

DropDownStyle : 콤보 상자의 형태를 결정, ComboBoxStyle을 열거형으로 가짐

기호상수 설명
Simple  선택 항목을 항상 볼 수 있음
DropDown  화살표 버튼을 클릭해야 선택 항목을 볼 수 있음
DropDownList  화살표 버튼뿐만 아니라 텍스트 부분을 클릭하여도 선택 항목을 볼 수 있음

 

ex)

ListBox.SelectedIndex 속성 : ListBox에서 현재 선택되어 있는 항목의 인덱스(0부터 시작)를 가져오거나 설정한다. 현재 선택된 항목의 0부터 시작하는 인덱스이다. 선택된 항목이 없으면 -1 값이 반환된다.

private void button1_Click(object sender, EventArgs e)
{
	if(textBox1.Text != "" && listBox1.Items.Contains(textBox1.Text) == false)
	{
		listBox1.Items.Add(textBox1.Text);
		comboBox1.Items.Add(textBox1.Text);
		textBox1.Text = "";
	}    
}

private void button2_Click(object sender, EventArgs e)
{
	if(listBox1.SelectedIndex > -1)
	{
		listBox1.Items.RemoveAt(listBox1.SelectedIndex);
		//listBox1.Items.RemoveAt(listBox1.Items.IndexOf(textBox1.Text));
		//textBox1.Text = "";
	}
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
	label2.Text = comboBox1.SelectedItem.ToString();
}

 

리스트박스와 콤보박스에 데이터 추가

 

리스트박스의 데이터 삭제

 

7.3) 체크리스트 상자

리스트 상자의 항목에 체크 상자를 추가한 형태의 컨트롤이다. 체크 리스트 상자의 프로퍼티는 리스트 상자와 대부분 동일하며 CheckOnClick 프로퍼티가 추가되었다.

 

ex)

private void button1_Click(object sender, EventArgs e)
{
	var strTemp = "";
	foreach(var item in checkedListBox1.CheckedItems)
	{
		strTemp = strTemp + item.ToString() + " ";
	}
	MessageBox.Show($"당신의 취미는 {strTemp}입니다.", "확인", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

 

예제 실행 화면

 

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
	if(e.NewValue == CheckState.Checked && checkedListBox1.CheckedItems.Count >= 3)
	{
		e.NewValue = CheckState.Unchecked;
		MessageBox.Show("최대 선택 개수는 3개입니다.");
	}
}

 

예제 실행 화면

 

8)  대화상자

대화 상자의 용도는 사용자와 애플리케이션간의 교량 역할을 하며 주로 소량의 데이터를 입출력하기 위한 수단이다. 생성방법은 모달(modal) 대화상자, 모덜리스(modeless) 대화상자가 있다.

 

대화상자의 종류

  • 메시지 대화상자 : 사용자에게 간단한 메시지 표현
  • 공통 대화 상자 : 윈도우 운영체제에서 기본적으로 제공. 열기, 저장, 글꼴, 색, 인쇄, 페이지 설정 등

8.1) 모달 대화상자

대화 상자가 종료되기 전에 대화 상자를 띄은 애플리케이션으로 돌아갈 수 없다. 모달 대화상자를 만들기 위해선 Form 클래스의 멤버인 ShowDialog() 메서드를 이용하면 된다.

 

8.2) 모덜리스 대화상자

현재 대화 상자의 요구에 반응하지 않아도 다른 대화 상자로 전환이 가능하다. 모덜리스 대화 상자를 만들기 위해선 Form 클래스의 멤버인 Show() 메서드를 이용하면 된다.

 

ex)

// Form1.cs
private void button1_Click(object sender, EventArgs e)
{
	Form2 form = new Form2();
	form.ShowDialog(); // 모달
	//form.Show(); // 모달리스
}
//Form2
private void button1_Click(object sender, EventArgs e)
{
	Close();
}

 

예제 실행 화면

 

8.3) 메시지 상자

사용자에게 간단한 메시지를 전달할 때 사용한다. MessageBox 클래스의 멤버인 Show() 메서드를 이용한다.

MessageBox.Show(message);
MessageBox.Show(message, caption);
MessageBox.Show(message, caption, buttonKind);
MessageBox.Show(message, caption, buttonKind, iconKind);

 

메시지 상자 예시

 

버튼의 종류

 

아이콘의 종류

 

기본 버튼 설정

메시지 상자가 활성화될 때 초기에 입력 포커스를 갖는 버튼으로 기본 버튼을 명시하지 않으면 첫 번째 버튼이 기본 버튼이 된다.

기호상수(멤버이름) 순서 값 설명
Button1 0x000  왼쪽을 기준으로 첫 번째 버튼을 기본으로 설정
Button2 0x100  왼쪽을 기준으로 두 번째 버튼을 기본으로 설정
Button3 0x200  왼쪽을 기준으로 세 번째 버튼을 기본으로 설정

 

8.4) 공통 대화상자

윈도우 운영체제에서 기본적으로 제공하며 정형화된 대화 상자이다. CommonDialog 클래스의 파생 클래스이다.

  • FileDialog : OpenFileDialog(파일 열기), SaveFileDialog(파일 저장)
  • FontDialog(글꼴)
  • ColorDialog(색)
  • PrintDialog(인쇄)
  • PageSetupDialog(페이지 설정)
  • FolderBrowserDialog(폴더 탐색/생성)

열기 대화상자 : 드라이브, 폴더, 파일 확장자를 설정하여 원하는 형식의 파일을 찾을 수 있는 기능 제공

프로퍼티 설명
FileName  대화상자에서 선택된 절대경로 형태로 구성된 파일명
FileNames  Multiselect 프로퍼티가 참으로 설정된 경우에 파일명들을 나타내는 스트링 배열
Filter  콤보 상자에 표시될 문자열(파일 형식)과 해당 파일 형식을 선택할 때 사용하게 될 확장자
 "파일형식1|확장자|파일형식2|확장자2..." 형식으로 명시
FilterIndex  대화상자에서 현재 선택된 Filter 프로퍼티의 인덱스
InitialDirectory  대화상자에 표시하는 초기 디렉토리
RestoreDirectory  종료 전에 초기 디렉토리로 되돌아갈 지의 여부
Multiselect  대화상자에서 여러 파일들을 선택할 수 있는 지의 여부

 

ex)

private void button1_Click(object sender, EventArgs e)
{
	openFileDialog1.FileName = "";
	openFileDialog1.InitialDirectory = "C:\\";
	openFileDialog1.Filter = "텍스트파일(*.txt)|*.txt";
	openFileDialog1.Multiselect = true;
	openFileDialog1.ShowDialog();

	foreach(var item in openFileDialog1.FileNames)
	{
		textBox1.Text = textBox1.Text + item;
		textBox1.Text = textBox1.Text + Environment.NewLine;
	}
}

 

예제 실행 화면_1

 

예제 실행 화면_2

 

예제 실행 화면_3

 

예제 실행 화면_4

 

색 대화상자 : 색상표에서 기본 색을 선택하거나 사용자 지정 색을 만들어 사용할 수 있는 기능 제공

 

ColorDialog 컴포넌트

 

ex)

private void button2_Click(object sender, EventArgs e)
{
	if(colorDialog1.ShowDialog() == DialogResult.OK)
	{
		BackColor = colorDialog1.Color;
	}
}

 

에제 실행 화면

 

private void button3_Click(object sender, EventArgs e)
{
	if (colorDialog1.ShowDialog() == DialogResult.OK)
	{
		button3.BackColor = colorDialog1.Color;
	}
}

 

예제 실행 화면

 

cf. 참고파일

cs08.pdf
1.90MB
cs09.pdf
1.96MB

COMMENT