e아이디나 패스워드 등, 이용자로부터 값을 입력받은 경우에 그걸 체크해야 하는 경우가 많이 있다. 예를 들어 공백금지라던가, 문자 수 제한을 한다거나, 영문자와 숫자만 입력가능 하다거나..등등.
웹개발에서는 프레임워크에 포함된 라이브러리를 사용했는데 C#에서는 검증코드를 만들어야 하나보다. 물론 에러메세지를 표시해도 되는데, 가능하면 폼 옆에 에러 아이콘을 표시하고 제대로 된 입력값이 아니면 다른 폼을 입력하지 못하게 하려면 Error Provider를 사용하면 된다더라. 그래서 해봤던 내용을 정리한다.
[메모]
- Error Provider 는 하나만 추가해도 되나, 각 폼의 검증코드는 따로 작성할 것.
- 작성한 검증코드는 이벤트 속성에 추가하지 않으면 작동 안 한다.
- 문자 수 제한은 폼의 속성에서 Max Length 에 값을 줘도 된다.
- 영문자 (대/소문자) 나 숫자&특수문자 등, 입력값의 세부적인 조건을 정의할 때는 정규표현식을 사용한다. 변수에 정규표현식을 정의한 후, IsMatch 메소드를 사용하면 정규식과 일치하는지 판정할 수 있다.
[순서]
- 폼을 디자인 하고 이름을 부여한다.
- 툴박스에서 Error Provider 를 Drag and Drop으로 폼에 추가한다.
- 폼을 검증하는 메소드를 작성한다.
- 에러를 표시해야 하는 경우에 SetError() 를 정의한다.
- 에러가 없는 경우 혹은 폼을 초기화 할 땐 SetError() 에 null 을 정의해 줄 것.
- 에러가 발생한 경우, e.Cancel 에 true를 설정해서 이후의 이벤트를 정지시킴.
- 폼을 선택한 후, 설정->이벤트->포커스->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 sender, CancelEventArgs 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_username, null);
}
}
catch (Exception)
{
// 뭔가 에러가 생기면 예외처리..
e.Cancel = true;
MessageBox.Show("会員登録処理中、値の検証エラーが発生しました。", "会員登録処理エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
댓글
댓글 쓰기