닷넷/WinForms
C# 숫자만 입력되게 하는 방법들
FreeBear
2019. 4. 5. 08:54
반응형
금액이나 수량이 입력되는 텍스트박스를 만들 때 숫자가 아닌 것이 입력될 경우 계산에 오류를 주는 등 치명적인 오류가 발생할 수 있다.
그러므로 아예 입력될 때부터 숫자만 입력되게 할 수 있는 방법들에 대해 정리해 보았다.
1) KeyPress 이벤트에서 핸들링
[: 한글 입력은 ProcessKey이기 때문에 KeyPress 이벤트로는 한글 입력을 막지 못한다. 아래 방법 중 한가지를 같이 쓰던가 해야할 것이다.]
private void txtPrepay_KeyPress(object sender, KeyPressEventArgs e)
{
// 숫자와 백스페이스만 입력가능
if (!(char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back)))
{
e.Handled = true;
}
}
2) TextChanged 이벤트에서 int.TryParse 메소드 사용
// textBox1에 값이 입력될 때
private void textBox1_TextChanged(object sender, EventArgs e)
{
int i;
if (int.TryParse(textBox1.Text.Replace(",",""), out i))
{
// textBox1의 값이 숫자이면 textBox1에 값 입력
textBox1.Text = i.ToString();
}
else
{
// textBox1의 값이 숫자가 아니면 0으로 변경
textBox1.Text = "0";
}
}
3) TextChanged 이벤트에서 정규식 Regex 사용
// textBox1에 값이 입력될 때
private void textBox1_TextChanged(object sender, System.EventArgs e)
{
Regex regexnumber = new Regex(@"[0-9]"); // 정규식 0~9 숫자만
Boolean ismatch = regexnumber.IsMatch(textBox1.Text);
// textBox1의 값이 숫자가 아니면 0으로 변경
if (!ismatch)
{
textBox1.Text = "0";
}
}
반응형