본문 바로가기

SIMPLE C#/기초

[SIMPLE C#] C# Input box 만들기

(이 글을 프로그램 전용 블로그 http://tindevil.com 에서 내용을 발췌 했습니다. 워드프레스에서 작성된 문서이다보니 티스토리와는 맞지 않는 부분이 좀 있으니 아래 글 링크를 통해서 원본 글을 확인하는 것이 좋습니다 :-)

 

원본 출처 : http://tindevil.com/?p=586 

Visual Basic 의 “INPUT BOX”를 알고 계신가요?

아래는 Microsoft Excel 의 인풋박스 모습이지만 visual basic 의 것과 동일한 모습니다.

 

이번엔 c# 으로 위 inputbox 를 만드는 것을 설명 합니다. 단순 1줄 짜리 입력칸이지만 프로그램 개발시 은근히 많이 사용되는 화면이기도 합니다. 예를 들면 암호를 입력받거나, 사용자 이름등을 입력받을 때 이죠. Visual Basic 에서 위 화면은 function 형태로 제공 하며 언제든 호출 해서 쓸 수 있어 편했지만 C# 은 없는 것 같더라구요.

우선은 화면을 똑 같이 배치를 해볼까요?

Form 속성창 설정을 변경 합니다 MaximizeBox = False (최대화 버튼 비활성), MinimizeBox = False (최소화 버튼 비활성), 두 버튼이 OFF 되면 각각의 버튼이 표시가 되지 않습니다.

StartPosition 값을 CenterScreen 으로 변경하여 화면이 표시 될때 중앙에 나오게 합니다


배치된 컨트롤 종류

  • Textbox : 사용자가 입력할 수 있는 입력칸
  • Label : 사용자 메세지를 표시
  • Button : Ok,Cancel 2개의 버튼

버튼을 각각 더블클릭하여 기본 click 이벤트를 생성 합니다.

private void bt_ok_Click(object sender, EventArgs e)
{
    //OK 버튼 동작 코드
}
 
private void bt_cancel_Click(object sender, EventArgs e)
{
    //CANCEL 버튼 동작 코드
}

OK버튼은 어떤 일을 해야 할까요? 필요한 경우 사용자가 입력한 문구가 정상(?) 이지 확인해야 겠군요. 빈문자 허용안함 같은 옵션도 같이 응용하면 좋겠네요.

OK 버튼은 사용자가 입력한 값을 외부에서 접근 할 수있는 변수에 할당하고 DialogResult 값을 OK 로 반환
/// <summary>
/// 사용자가 입력한 문자를 저장할 변수
/// 외부에서 접근가능 하도록 public 으로 선언
/// </summary>
public string InputValue { get; set; }
private void bt_ok_Click(object sender, EventArgs e)
{
    InputValue = tb_content.Text.Trim();
    DialogResult = DialogResult.OK;
}

Dialogresult 값을 설정하면 Dialog 로 호출된 화면(.ShowDialog())은 화면이 바로 닫히게 됩니다. 이제 Cancel 버튼의 코드를 입력할까요?

취소 버튼이므로 현재 화면을 바로 닫아버린다(닫을 경우 다이얼로창은 dialogresult = cancel 값 적용)
private void bt_cancel_Click(object sender, EventArgs e)
{
    this.Close();
}

이 창의 기본 동작은 모두 작성한 듯 하네요. 그렇다면 이제 호출하는 주체의 파라미터(?)를 설정해줘야 겠네요? 인풋박스의 기본 옵션은 (제목표시줄 / 메세지 / 기본값) 3개의 파라미터를 가지고 생성됩니다. 즉 외부에서 3개의 입력을 받아서 해당 값을 가지고 기본 화면에 적용을 해야 합니다.

위 멘트는 최종 결과 물을 보면 바로 이해가 갑니다!

제목 : 사용자 암호 입력 , 메세지 : 사용자 암호를 입력하세요(암호는 4~12자리 사이로 입력합니다), 기본값 : (없음)

파라미터 3개를 입력받고 해당 값을 UI의 컨트롤에 적용합니다.
public Form1(string title, string message, string defaultstring="")
{
    InitializeComponent();
    this.Text = title; //상단 제목
    this.lb_title.Text = message; //중앙의 메세지
   thi s.tb_content.Text = defaultstring; //사용자 입력칸의 기본값
}

Inputbox 자체는 모두 만든 것 같습니다. 이제 이 것을 실제 코드에서 사용을 하고 VB처럼 function으로 만들어서 사용을 해볼 까요? 해당 폼 이름을 fInputbox 로 변경 하고 테스트로 사용할 폼을 하나더 만듭니다.

 
private void button1_Click(object sender, EventArgs e)
{
    var f = new fInputBox("암호 입력", "사용자 암호를 입력하세요\n암호는 4~12자리가 허용 됩니다");
    if(f.ShowDialog() == DialogResult.OK)
    {
        MessageBox.Show($"입력값={f.InputValue}");
    }
}

버튼을 눌러 보면 아래와 같은 inputbox 가 표시되고! 이번 포스팅은 완료 되었습니다.

 

여기까지 만든 소스는 아래에 있습니다

(소스는 프로그램 전용 블로그 에서 받아주세요)

 

숙제!

  1. 암호입력칸인데 암호가 보입니다. inputbox 호출 시 암호입력칸 파라미터도 입력받도록 해서 일반 입력/암호입력 모드를 구분 짓기
  2. 암호 입력 모드에서 사용자 입력값은 별표(*)로 표시
  3. inputbox 호출 시 빈값 허용 파라미터 추가
  4. 빈값허용하지 않았을 때 사용자가 미입력 후 ok 버튼을 누르면 관련 경고를 하고 커서를 입력칸으로 이동 하기

숙제에 대한 답은 일주일 뒤~에 추가 소스를 올리겠습니다