닷넷/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";
    }
}
반응형