2021년 목표설정

이미지
기본적으로 작년에 달성하지 못한 것들을 하려고 생각중인데..코로나가 언제까지 이어질지, 한국이나 북해도는 갈 수 있을지..자격증은 응시 가능할지..여러가지가 불확실하다. 2021년은 무엇보다 정신적인 부분과 경제적인 부분에 중점을 두고 조금 더 치열하게 지내보고 싶다. 일본나이로도 30대 마지막 해, 이제 불혹에 접어드는 나이..복잡하지만 심플하게. 육체적목표 : 트라이에슬론 스탠다드 도전하기 정신적 : 자격증2개 도전 + 자체개발 서비스 론칭 가족적 : 가정의 평화를 유지하기 경제적 : 외식과 유흥비를 줄이고 부수입을 늘려서 결과적으로 저축하기 사회적 : 목표세미나를 포함해서 민단과 개인인맥의 활성화와 교류를 촉진하기

[C#] Error Provider를 이용한 입력폼 체크 및 에러출력 (Feat. 정규표현식)

e아이디나 패스워드 등, 이용자로부터 값을 입력받은 경우에 그걸 체크해야 하는 경우가 많이 있다. 예를 들어 공백금지라던가, 문자 수 제한을 한다거나, 영문자와 숫자만 입력가능 하다거나..등등.

웹개발에서는 프레임워크에 포함된 라이브러리를 사용했는데 C#에서는 검증코드를 만들어야 하나보다. 물론 에러메세지를 표시해도 되는데, 가능하면 폼 옆에 에러 아이콘을 표시하고 제대로 된 입력값이 아니면 다른 폼을 입력하지 못하게 하려면 Error Provider를 사용하면 된다더라. 그래서 해봤던 내용을 정리한다.

[메모]

  • Error Provider 는 하나만 추가해도 되나, 각 폼의 검증코드는 따로 작성할 것.
  • 작성한 검증코드는 이벤트 속성에 추가하지 않으면 작동 안 한다.
  • 문자 수 제한은 폼의 속성에서 Max Length 에 값을 줘도 된다. 
  • 영문자 (대/소문자) 나 숫자&특수문자 등, 입력값의 세부적인 조건을 정의할 때는 정규표현식을 사용한다. 변수에 정규표현식을 정의한 후, IsMatch 메소드를 사용하면 정규식과 일치하는지 판정할 수 있다.


[순서]

  1. 폼을 디자인 하고 이름을 부여한다.
  2. 툴박스에서 Error Provider 를 Drag and Drop으로 폼에 추가한다.
  3. 폼을 검증하는 메소드를 작성한다.
    1. 에러를 표시해야 하는 경우에 SetError() 를 정의한다.
    2. 에러가 없는 경우 혹은 폼을 초기화 할 땐 SetError() 에 null 을 정의해 줄 것.
    3. 에러가 발생한 경우, e.Cancel 에 true를 설정해서 이후의 이벤트를 정지시킴.
  4. 폼을 선택한 후, 설정->이벤트->포커스->Validating 에 작성한 메소드를 설정한다.
    (필요에 따라서는 다른 이벤트에 설정해도 ㅇㅋ)
[소스코드]

// 에러컴포넌트 쓰기 위해서 필요
using System.ComponentModel;
// 정규표현식을 쓰기 위해서 필요
using System.Text.RegularExpressions;
// 윈도우 폼을 쓰기 위해서 필요
using System.Windows.Forms;

public void class regist_form : Form
{
// 영문과 숫자만 입력가능하게 하는 정규표현식
    Regex regex = new System.Text.RegularExpressions.Regex(@"^[A-Za-z0-9+]+$");
// ...todo
}

// 예를 들어, 사용자 이름을 받는 텍스트 박스를 체크하는 코드
// 작성 후, 디자이너에서 텍스트박스 선택 후 -> Properties 창에서 Event -> Focus > Validating 에 설정함.
private void tbUserName_Validation(object senderCancelEventArgs e)
        {
            try
            {
                // 텍스트박스가 공백이거나, 문자수가 4보다 작거나, 정규표현식과 일치하지 않는 경우
                if (tb_username.Text == null || tb_username.TextLength < 4 || !regex.IsMatch(tb_username.Text))
                {
                    // 에러 프로바이더의 아이콘을 사용자 이름 텍스트박스 옆에 표시 후, 포커스를 옮긴 후 이후의 이벤트를 중지시킴.
                    ep_regist.SetError(tb_username"4~15桁の英数字のみ");
                    tb_username.Focus();
                    e.Cancel = true;
                }
                else
                {
                    // 에러조건이 없는 경우에는 에러 프로바이더를 null로 설정함.
                    ep_regist.SetError(tb_usernamenull);
                }
            }
            catch (Exception)
            {
                // 뭔가 에러가 생기면 예외처리..
                e.Cancel = true;
                MessageBox.Show("会員登録処理中、値の検証エラーが発生しました。""会員登録処理エラー"MessageBoxButtons.OKMessageBoxIcon.Error);
            }
        }

댓글

이 블로그의 인기 게시물

[메모] PostgreSQL에서 Insert 하는 경우 자동채번 PK가 중복에러 나는 경우

[C# & LINQ] 랜덤으로 데이터를 한 개 추출하는 방법

[react-native] uuid 생성이 에러가 날 때 대처법