VS 버전: 2013

 

        private void NumberTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if(!(char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back)))    
            {
                e.Handled = true;
            }
        }

 

목표

숫자만 입력받는 TextBox 유저 컨드롤 만들기

 

 

프로젝트->추가->사용자 정의 컨트롤을 클릭하여 생성합니다. 저는 NumberTextBox.cs라고 적겠습니다.

 


추가된 NumberTextBox.cs 에 코드를 보기 위해서 NumberTextBox를 더블 클릭합니다.

 

그러면 코드는 다음과 같이 작성되어 있습니다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Signal_processing
{
    public partial class NumberTextBox : UserControl
    {
        public NumberTextBox()
        {
            InitializeComponent();
        }
    }
}

 

저는 TextBox를 그대로 가져와서 숫자만 입력되도록 이벤트를 추가할 것이기 때문에

 

아래와 같이 UserControl을 TextBox로 수정합니다.

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Signal_processing
{
    public partial class NumberTextBox : TextBox
    {
        public NumberTextBox()
        {
            InitializeComponent();
        }
    }
}

 

이제 NumberTextBox.cs를 더블클릭하면 다음과 같은 에러를 보게 됩니다.

 

 

 

.Designer.cs 줄: 32 열: 1이라는 메세지를 클릭하여 오류가 난 위치로 이동합니다.

다음과 같이 this.AutoScaleMode에 빨간줄이 그어져 있습니다. 

이것은 UserControl 클래스에서는 있었던 속성이 TextBox로 바꾸면서 이 속성이 없어서 나타난 오류입니다.

 

이 줄을 지워줍니다.

 

 

 

[이벤트 추가]

NumberTextBox.cs 열면 속성창에 NumberTextBox의 속성이 나타납니다.

번개 아이콘을 클릭하여 이벤트 속성으로 변경하고

KeyPress 영역을 더블클릭 하여 해당 이벤트가 자동생성되도록 합니다.

 

 

그러면 아래와 같이 NumberTextBox_KeyPress 함수가 생성됩니다.

 

 

다음과 같이 함수 안에 로직을 작성하면 완료됩니다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Signal_processing
{
    public partial class NumberTextBox : TextBox
    {
        public NumberTextBox()
        {
            InitializeComponent();
        }

        private void NumberTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            //숫자와 백스페이스를 제외한 나머지를 바로 처리
            if(!(char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back)))    
            {
                e.Handled = true;
            }
        }
    }
}

 

 

이제 컴파일 한번 하면 구성 요소에 NumberTextBox가 나타나는것을 확인 할 수 있습니다.

 

 

 

 

Reference

[C#]TextBox에 숫자만 입력받기 (tistory.com)

반응형

+ Recent posts