[WinForms] 로그인 창

00·2025년 2월 7일

프로젝트

목록 보기
4/14

1. 프로젝트 소개

  • 목표
    윈도우 폼(WinForms)을 사용하여 간단한 로그인 창을 구현하고, 사용자 인증 기능을 통해 로그인 성공/실패 여부를 확인하는 윈도우 프로그램을 만듭니다.

  • 사용 기술

    • C#
    • Windows Forms
  • 개발 환경

    • Visual Studio 2022
    • .NET Framework

2. 기능 설명

  • 로그인 창
    사용자 ID와 비밀번호를 입력받는 텍스트 박스와 로그인 버튼으로 구성됩니다.

  • 사용자 인증
    로그인 버튼 클릭 시, 미리 설정된 ID와 비밀번호를 기반으로 사용자 인증을 수행합니다.

  • 로그인 성공/실패 메시지
    입력된 ID와 비밀번호가 미리 설정된 값과 일치하는지 확인하여 로그인 성공 여부를 메시지 박스로 알려줍니다.
    로그인 성공 시 "로그인에 성공했습니다." 메시지 박스를 표시하고, 실패 시 "로그인에 실패했습니다." 메시지 박스를 표시합니다.

  • 실행 화면


3. 어려웠던 점과 해결 과정

  • 어려웠던 점:
    • 이벤트 처리: 처음에는 이벤트 핸들러 등록, 입력 값 가져오기 과정이 익숙하지 않았습니다.
    • ID/비밀번호 비교: 처음에는 userIduserPassword 변수에 저장된 값을 미리 입력해둔 값과 비교하는 데 어려움을 겪었습니다. string 클래스의 Equals() 메서드를 사용하여 문자열을 비교하는 방법을 찾아 적용했습니다.
    • 비밀번호 노출: 비밀번호를 입력하면 어떤 문자를 입력했는지 화면에 그대로 보입니다.
  • 해결 과정:
    • 이벤트 처리: Visual Studio의 디자인 뷰에서 로그인 버튼을 더블 클릭하여 자동으로 이벤트 핸들러를 생성하고, 이벤트 핸들러에서 SignInButton_Click 메서드에 코드를 작성했습니다.
    • 입력 값 가져오기: id.Textpassword.Text를 사용하여 텍스트 박스에서 입력된 값을 가져왔습니다.
    • ID/비밀번호 비교: Equals() 메서드를 사용하여 문자열을 비교했습니다.
    • 비밀번호 노출: 비밀번호를 입력하는 텍스트박스(TextBox)의 속성 중 PasswordChar 속성값에 "*" 문자를 입력하여, 비밀번호를 입력할 때 입력한 문자 대신 특수문자를 출력하게 만들었습니다.

4. 배운 점

  • Windows Forms 기반의 간단한 로그인 창을 구현하여 C# 기본 문법과 윈도우 폼 컨트롤 활용 능력을 익히고, 로그인 기능을 통해 사용자 인증 과정을 이해하였습니다.

  • Windows Forms 컨트롤 활용: 텍스트 박스, 버튼, 레이블 등 윈도우 폼 컨트롤의 속성과 이벤트를 이해하고, 이를 활용하여 UI를 구성할 수 있게 되었습니다.

  • 이벤트 처리: 컨트롤에서 발생하는 이벤트를 처리하는 방법을 익히고, 이벤트 핸들러를 작성하여 사용자 상호 작용에 따라 프로그램이 동작하도록 구현할 수 있게 되었습니다.

  • 조건문과 메서드 활용: if 문을 사용하여 조건에 따라 다른 코드를 실행하는 방법과 Equals() 메서드를 사용하여 문자열을 비교하는 방법을 익혔습니다. 또한 MessageBox.Show() 메서드를 사용하여 로그인 성공 여부를 알리는 메시지 박스를 표시했습니다.


5. 디자인 및 코드 설명

(1) 컨트롤

레이블(Label)

  • 화면 중앙의 폼(Form)에 배치합니다.
  • Text 속성값을 "로그인 창"으로 변경합니다. Text 속성은 레이블에 보여질 문구를 의미합니다.
  • Font 속성값을 클릭하면 글꼴을 변경할 수 있는 창이 나타납니다. 글꼴의 스타일을 굵게, 크기는 20으로 설정합니다.

텍스트박스(TextBox)

  • 텍스트박스는 사용자 입력을 받을 수 있는 컨트롤입니다.

  • 로그인 창에서 아이디와 비밀번호를 입력할 텍스트박스(TextBox)를 도구 상자에서 가져옵니다.

  • 속성창에서 텍스트박스의 (Name) 항목의 값을 id로 변경합니다. (Name) 항목의 값은 추후 코드에서 변수명으로 사용됩니다. id라는 변수명을 통해 사용자가 입력한 아이디를 가져올 것입니다.

  • 복사한 텍스트박스의 (Name) 속성값을 password로 변경합니다.

버튼(Button)

  • 도구 상자에서 사용자 아이디와 비밀번호를 검증할 버튼(Button) 컨트롤을 가져와 폼에 배치합니다.

  • C# 코드에서 버튼을 제어하기 위한 이름을 변경할 수 있는데, 버튼 컨트롤을 선택해 (Name) 속성값을 "SignInButton"으로 변경합니다.

  • 버튼을 클릭할 때 발생하는 이벤트를 추가하기 위해 속성창 메뉴 중 번개 모양 아이콘을 클릭해 Click 이벤트를 마우스 더블클릭.

(2) 소스 코드

SignInButton_Click 메서드

  • 로그인 버튼 클릭 시 발생하는 이벤트를 처리하는 메서드입니다. 버튼의 Click 이벤트를 추가할 때 자동으로 생성됩니다.

입력값 가져오기

  • id와 password는 텍스트박스의 (Name) 속성에서 지정한 이름입니다. 따라서 id.Text로 id 텍스트박스에 입력된 값을 가져오고, password.Text 로 password 텍스트박스에 입력된 내용을 가져온 후, 각각 string 변수 userId와 userPassword에 저장합니다.
using System;
using System.Windows.Forms;

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

        private void SignInButton_Click(object sender, EventArgs e)
        {
            string userId = id.Text;
            string userPassword = password.Text;

            if(userId.Equals("idvvvvo") && userPassword.Equals("111")) 
            {
                MessageBox.Show("로그인에 성공했습니다.", "로그인");
            }
            else
            {
                MessageBox.Show("로그인에 실패했습니다.", "로그인");
            }
        }
    }
}

Equals 메서드

  • string은 문자열을 저장할 수 있는 데이터 형이며, 문자열을 비교할 수 있는 Equals 메소드를 호출할 수 있습니다. 따라서 userId.Equals 메소드로 userId에 저장된 문자열과 비교해 일치하면 "참(True)"를 반환하고, 그렇지 않으면 "거짓(False)"을 반환합니다.

  • if 문을 사용하여 입력된 ID와 비밀번호가 미리 설정된 값과 일치하는지 확인합니다. 두 조건을 && 연산자로 묶어 아이디와 비밀번호가 모두 일치할 경우 참이되어 if문을 실행하도록 만듭니다. 둘 중 하나라도 거짓일 경우 else문을 실행합니다.

MessageBox

  • MessageBox 클래스는 사용자에게 메시지를 출력해 확인이나 선택, 취소 등을 결정할 수 있도록 알려주는 기능을 갖고있습니다.
  • MessageBoxShow 메소드를 호출하고 매개변수로 출력할 메시지와 타이틀을 입력하여 로그인에 성공했을 때와 실패했을 때 메시지 창을 띄워 사용자에게 결과를 알려줍니다. [확인] 버튼을 클릭하면, 메시지 창이 닫힙니다.

실행 결과

(3) 개선

  • 비밀번호를 입력하면 어떤 문자를 입력했는지 화면에 그대로 보입니다.

  • 텍스트박스(TextBox)의 속성을 변경하여 해결했습니다. 비밀번호를 입력하는 텍스트박스(TextBox)의 속성 중 PasswordChar 속성값에 특정한 문자를 입력하면 해당 문자로 대체됩니다. [*] 문자를 입력하여 문자의 수만큼 [*]을 출력하게 만듭니다.

실행 결과

  • 시스템마다 비밀번호 입력창을 일관된 형태로 보여주고 싶으므로, 텍스트박스(TextBox) 속성 중 UseSystemPasswordChar 속성값을 "True"로 변경하여, 시스템에 따른 비밀번호 출력 형식으로 변경합니다.

실행 결과

0개의 댓글