C# 초보 캠프

Day 7

다양한 윈폼 컨트롤의 사용

윈폼 화면을 구성하는 데는 여러 가지 다양한 컨트롤들이 사용될 수 있다. 예를 들어, 다양한 값들 중 하나를 선택하기 위해 콤보박스나 라디오버튼, 리스트박스 등이 사용될 수 있고, 날짜 입력위해 DateTimePicker 혹은 달력 컨트롤이 사용될 수 있다. 윈폼 프로그래밍을 할 때 개발자는 이러한 컨트롤들을 적절하게 사용하여 윈도우 화면을 구성하게 된다. 윈폼에서 기본적으로 제공되는 컨트롤들을 표준 컨트롤이라 하며, 이외에도 여러 개발회사들이 다양한 컨트롤들을 판매하고 있으므로 업무에 맞는 적절한 컨트롤들을 선택하여 사용할 수 있다. 윈폼에서 제공되는 표준 컨트롤 중 자주 쓰이는 컨트롤들에 대해서는 C# 윈폼 섹션을 참고하기 바란다.

실습

아래는 윈폼 디자이너 화면에서 다양한 컨트롤들을 드래그-앤-드롭하여 구성해 본 화면이다. 아래와 같은 컨트롤들을 사용하여 화면 자체만 구성해 보는 것도 좋은 실습이 된다.

입력 데이타를 텍스트 파일에 저장하기

윈폼 입력 화면으로부터 데이타를 읽어 이를 간단하게 텍스트 파일로 저장해 보는 연습을 해 본다. 일반적으로는 텍스트 파일보다는 데이타베이스에 저장하는 것이 보편적이지만 여기서는 우선 텍스트 파일로 저장해 본다. 텍스트 파일에 저장하는 방식으로 각 필드를 특별한 문자로 구분하여 한 라인씩 저장하는 방식이 많이 사용되는데, 흔히 콤마로 필드를 구분하거나 탭(Tab)으로 구분하곤 한다. 흔히 콤마로 구분된 파일을 Comma Separated Values File 혹은 줄여서 csv 파일이라 하고, 탭으로 구분된 파일을 Tab Separated Values File 혹은 줄여서 tsv 파일이라 한다.

실습

간단한 입력화면으로부터 데이타를 가져와 텍스트 파일에 한 라인으로 저장하는 프로그램을 작성해 본다. 각 필드는 콤마로 분리하며, 입력화면 데이타를 한번 저장하면 텍스트 파일에 한 라인이 저장되고, 계속 추가로 여러 라인을 저장해 본다.

다음은 아래 코드와 연관된 입력화면이다.

  using System;
  using System.IO;
  using System.Windows.Forms;

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

          private void btnSave_Click(object sender, EventArgs e)
          {
              string id = txtId.Text;
              string name = txtName.Text;

              string grade = "";
              if (cboGrade.SelectedIndex >= 0)
              {
                  grade = cboGrade.Items[cboGrade.SelectedIndex].ToString();
              }

              string date = dtDate.Value.ToShortDateString();

              string amount = "";
              if (cboAmount.SelectedIndex >= 0)
              {
                  amount = cboAmount.Items[cboAmount.SelectedIndex].ToString();
              }

              // 각 필드를 콤마로 결합한다.
              string data = id + "," + name + "," + grade + "," + date + "," + amount;

              // 텍스트 파일을 쓸 때 StreamWriter를 사용한다
              StreamWriter wr = new StreamWriter("data.txt", true);
              wr.WriteLine(data);  // 한 라인을 저장
              wr.Close();
          }

          private void btnClear_Click(object sender, EventArgs e)
          {
              txtId.Text = string.Empty;
              txtName.Text = string.Empty;
              cboGrade.SelectedIndex = -1;
              dtDate.Value = DateTime.Today;
              cboAmount.SelectedIndex = -1;
          }
      }
  }
  • 콤보박스에서 아무 값도 선택되지 않으면, SelectedIndex 속성이 -1 이다. 따라서, SelectedIndex 가 0보다 큰 지를 체크한다
  • 문자열을 결합할 때는 + 를 써서 할 수 있다. 좀 더 복잡한 결합은 string.Format()을 사용할 수 있다
  • 텍스트 파일에 데이타를 쓰기 위해서 StreamWriter 클래스를 사용한다. StreamWriter의 데이타 파일은 data.txt 로 실행되는 프로그램 디렉토리에 생성된다. data.txt 뒤의 true는 데이타를 해당 파일에 추가(append)할 수 있다는 것을 의미한다.
  • 한 라인을 쓸 때는, 이 클래스의 WriteLine() 메서드를 사용한다. StreamWriter 를 사용한 후에는 반드시 Close()를 호출해서 닫아 주어야 한다.
  • btnClear_Click() 에서 처럼 공백문자는 string.Empty로 표시할 수 있으며, 콤보박스의 초기화는 SelectedIndex에 -1을 대입한다


본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.