Nhiều lúc bạn chỉ muốn control textbox trong c# nhận vào duy nhất giá trị là số? Có rất nhiều kỹ thuật được sử dụng để làm việc này. Nhưng đâu sẽ là cách tốt nhất?
Với sự kiện KeyPress trong C#, tôi nghĩ đây là cách khá đơn giản để tạo ra một C# Textbox chỉ nhận giá trị số mà không nhất thiết phải tạo một Custom C# control.
Cách 1: dùng TryParse
TryParse là phương thức để kiểm tra dữ liệu nhập vào từ bàn phím rất đơn giản và có sẵn kể từ phiên bản .Net FrameWork 2.0. Đây là cách để chuyển từ một chuỗi ký tự thành một số nguyên.
Phương thức TryParse trả về hoặc là một (), hoặc là một số. Trả về () có nghĩa là giá trị nhập vào không phải là số. Chúng ta có thể sử dụng dễ dàng bằng cách sau:
- Code:
-
private void txtType_KeyPress(object sender, KeyPressEventArgs e)
{
int isNumber = 0;
e.Handled = !int.TryParse(e.KeyChar.ToString(), out isNumber);
}
Kết quả của việc chuyển đổi không quan trọng. Điều quan trọng ở đây là nếu quá trình chuyển đổi thành công, nghĩa là giá trị bạn nhập vào là số. Nếu e.Handled được thiết lập là true, việc thiết lập này khiến C# textbox control không quản lý việc nhập mà chính bạn - người lập trình đang quản lý việc nhập vào bàn phím.
Cách 2: dùng Regex
Tuy nhiên nếu muốn, chúng ta có thể viết C# code để có được hiệu quả hơn, cách tốt nhất và nhanh nhất là hãy sử dụng Regular Expressions. Regular Expressions nói đơn giản là một chuỗi định dạng tổ hợp được dùng để so sánh với các phần xác định của đoạn văn bản.
Ở đây chúng ta sẽ dùng chuỗi “\\d+” khi muốn kiểm tra từng ký tự đơn có phải là số không, cách làm như sau:
- Code:
-
private void txtType_KeyPress(object sender, KeyPressEventArgs e)
{
if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), "\\d+"))
e.Handled = true;
}
Trên đây mới chỉ là 2 cách để khiến 1 C# Textbox chỉ chấp nhận giá trị nhập vào là số. Ngoài ra còn có rất nhiều cách khác để bạn tìm hiểu, tuy nhiên tôi nghĩ 2 cách này là hiệu quả và thiết thực nhất.
Chúc bạn học tốt