Header Ads

Chỉ cho phép nhập số trong WinForm C#



Để giải quyết vấn đề này, chúng ta có hai cách sau đây. Bạn có thể tự cân nhắc lựa chọn nhé.

Cách 1 - Sử dụng NumericUpDown

Nếu bạn muốn việc nhập liệu chỉ chấp nhận số, điều đầu tiên mà bạn nên nghĩ đến là NumericUpDown. Control này chỉ hiển thị giá trị là những con số mà bạn có thể chỉnh lên xuống tùy ý.

Đơn giản bạn chỉ cần kéo thả control này từ Toolbox vào trong form của bạn:


Để lấy giá trị của nó, bạn chỉ cần sử dụng thuộc tính Value của control. Ví dụ như:
   // Lấy giá trị từ NumericUpDown, dạng số thập phân
decimal value = numericUpDown1.Value;

// Hiển thị lên hộp thông báo
MessageBox.Show(value.ToString()); 

Lưu ý: Giá trị mà nó trả về là dạng số thập phân, bạn có thể chỉnh định dạng của nó thành số nguyên (Integer) hoặc chuỗi (string) nếu bạn cần. Control này thì bản thân nó đã không cho phép chứa các ký tự không phải số rồi.

Cách 2 - Sử dụng với Textbox

Trong trường hợp bạn không sử dụng NumericUpDown, bạn có thể sử dụng Textbox với sự kiện KeyPress.

Điều đầu tiên bạn cần làm là thêm hàm vào sự kiện KeyPress như sau:
  • Chọn Textbox trên form của bạn
  • Từ cửa sổ Properties, chuyển qua tab Event (có biểu tượng sấm sét).
  • Sau đó nhấn đúp chuột vào mục KeyPress:


Bạn thêm code sau vào hàm mới tạo nhé.
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // Xác thực rằng phím vừa nhấn không phải CTRL hoặc không phải dạng số
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.'))
    {
        e.Handled = true;
    }

    // Nếu bạn muốn, bạn có thể cho phép nhập số thực với dấu chấm
    if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
    {
        e.Handled = true;
    }
}

Nếu bạn muốn lấy giá trị của nó, bạn chỉ cần chuyển từ string sang kiểu số như sau:
string txtValue = textBox1.Text;

// Lấy giá trị dạng số thập phân
decimal valueDec = Convert.ToDecimal(txtValue);

// Lấy giá trị dạng số nguyên
int valueInt = Convert.ToInt32(txtValue);

Chúc bạn code vui vẻ nhé <3

Không có nhận xét nào

Được tạo bởi Blogger.