본문 바로가기
Program Language/C#(GUI)

[C# Winform] MaskedTextBox를 활용한 "약속 일정 도우미" 제작

by 토담이아빠 2023. 9. 17.

MaskedTextBox를 활용한 "약속일정도우미"제작

 

Windows Forms에서 MaskedTextBox 컨트롤은 사용자의 입력을 지정된 형식에 맞게 안내해 주는 데 매우 유용합니다. 이번 포스트에서는 MaskedTextBox를 활용하여 약속의 날짜와 시간을 입력받고, 약속까지 얼마나 남았는지를 확인하는 "약속 일정 설정 도우미"를 제작해 보겠습니다.

 


 

폼디자인


폼에 MaskedTextBox 2개, Label 2개, Button 1개, PictureBox 1개(이미지포함), TextBox 1개를 아래와 같이 배치합니다.

 


속성 설정

 

1. MaskedTextBox (날짜 입력)
    - Mask: 0000-00-00
    - PromptChar: '-' (이것은 선택 사항이지만, 사용자에게 입력 형식을 보여주기 위한 프롬프트로 '-' 문자를 사용하게 됩니다.)
 
2. MaskedTextBox (시간 입력)
    - 이름: mtbTime
    - Mask: 00:00
    - PromptChar: ':' (선택 사항)

3. Label (날짜 라벨)
    - 이름: lblDate
    - Text: 날짜:


4. Label (시간 라벨)
    - 이름: lblTime
    - Text: 시간:

5. Button (약속 확인 버튼)
    - 이름: btnCheckAppointment
    - Text: 약속 확인

6. 텍스트박스
    - 이름: txtMessage
    - Multiline: True
    - ReadOnly: True (사용자가 직접 텍스트를 변경하지 못하도록 설정)


 

Form1.cs 작성하기

 

속성 설정을 마쳤으면 약속 확인 버튼을 더블 클릭하여 다음과 같은 코드를 입력합니다.


using System;
using System.Globalization;
using System.Windows.Forms;

namespace WindowsFormsEX
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void btnCheckAppointment_Click(object sender, EventArgs e)
        {
            string dateInput = mtbDate.Text;
            string timeInput = mtbTime.Text;

            if (string.IsNullOrWhiteSpace(dateInput.Replace("-", "")) || string.IsNullOrWhiteSpace(timeInput.Replace(":", "")))
            {
                txtMessage.Text = "약속 날짜와 시간을 올바르게 입력하세요.";
                return;
            }

            try
            {
                DateTime appointmentTime = DateTime.ParseExact($"{dateInput} {timeInput}", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);
                TimeSpan timeToAppointment = appointmentTime - DateTime.Now;

                if (timeToAppointment.TotalMinutes <= 0)
                {
                    txtMessage.Text = "약속 시간이 이미 지났습니다.";
                }
                else if (timeToAppointment.TotalMinutes <= 60)
                {
                    txtMessage.Text = $"약속까지 {timeToAppointment.Minutes}분 남았습니다.";
                }
                else
                {
                    txtMessage.Text = $"약속까지 {timeToAppointment.Hours}시간 {timeToAppointment.Minutes}분 남았습니다.";
                }
            }
            catch
            {
                txtMessage.Text = "입력한 날짜와 시간 형식이 올바르지 않습니다.";
            }
        }
    }
}

 

코드 설명

 

위 코드는 버튼(btnCheckAppointment)을 클릭했을 때 발생하는 이벤트 핸들러입니다. 사용자가 입력한 약속 날짜와 시간을 받아서 현재 시간과 비교하여 약속까지 얼마나 남았는지를 텍스트 박스(txtMessage)에 출력합니다.

 

1. 입력 값 가져오기


string dateInput = mtbDate.Text;
string timeInput = mtbTime.Text;

mtbDate와 mtbTime은 MaskedTextBox 컨트롤로, 사용자가 날짜와 시간을 입력하는 필드입니다.
입력된 날짜와 시간 값을 각각 dateInput과 timeInput 변수에 저장합니다.

 

 

2. 입력 값 확인


if (string.IsNullOrWhiteSpace(dateInput.Replace("-", "")) || string.IsNullOrWhiteSpace(timeInput.Replace(":", "")))
{
    txtMessage.Text = "약속 날짜와 시간을 올바르게 입력하세요.";
    return;
}

입력된 날짜와 시간 값이 비어 있거나 올바르지 않은지 확인합니다.
비어 있거나 올바르지 않으면 경고 메시지를 표시하고 함수를 종료합니다.

 

 

3. 날짜와 시간 파싱


DateTime appointmentTime = DateTime.ParseExact($"{dateInput} {timeInput}", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);

DateTime.ParseExact 메서드를 사용하여 dateInput과 timeInput을 조합하여 DateTime 객체로 변환합니다.
"yyyy-MM-dd HH:mm"은 날짜와 시간의 형식을 나타냅니다.

 

 

4. 남은 시간 계산


TimeSpan timeToAppointment = appointmentTime - DateTime.Now;

appointmentTime에서 현재 시간(DateTime.Now)을 빼서 약속까지 남은 시간을 계산합니다.

 

 

5. 남은 시간에 따른 메시지 출력


if (timeToAppointment.TotalMinutes <= 0)
{
    txtMessage.Text = "약속 시간이 이미 지났습니다.";
}
else if (timeToAppointment.TotalMinutes <= 60)
{
    txtMessage.Text = $"약속까지 {timeToAppointment.Minutes}분 남았습니다.";
}
else
{
    txtMessage.Text = $"약속까지 {timeToAppointment.Hours}시간 {timeToAppointment.Minutes}분 남았습니다.";
}

남은 시간이 0분 이하라면 약속 시간이 지났다는 메시지를 출력합니다.
남은 시간이 1시간 이하라면 남은 분만 출력합니다.
그 이외의 경우에는 남은 시간과 분을 함께 출력합니다.

 

 

6. 오류 처리


catch
{
    txtMessage.Text = "입력한 날짜와 시간 형식이 올바르지 않습니다.";
}

날짜와 시간 파싱 과정에서 오류(예: 잘못된 날짜 형식)가 발생하면 해당 메시지를 출력합니다.


이렇게 코드는 사용자의 입력 값을 확인, 파싱, 검증하는 과정을 거쳐 남은 시간을 계산하고 그 결과를 표시하는 역할을 합니다. 코드를 실행하면 다음과 같습니다.

 

실행결과

약속일정도우미 실행결과


 

댓글