Xài "mặt nạ" (mask.. gì gì đấy không nhớ )không nhanh hơn sao ?
Bạn cần tạo một TextBox sao cho TextBox này bỏ qua tất cả các cú nhấn phím không phải số.
Thêm phương thức thụ lý sự kiện TextBox.KeyPress. Trong phương thức này, thiết lập thuộc tính KeyPressEventArgs.Handled là true để bỏ qua cú nhấn phím không hợp lệ.
Cách tốt nhất để hiệu chỉnh đầu vào bất hợp lệ là không cho nó được nhập ngay từ đầu. Điều này dễ dàng hiện thực với TextBox vì nó cung cấp sự kiện KeyPress, sự kiện này xảy ra sau khi cú nhấn phím được tiếp nhận nhưng trước khi nó được hiển thị. Bạn có thể sử dụng thông số sự kiện KeyPressEventArgs để hủy bỏ cú nhấn phím không hợp lệ bằng cách đặt thuộc tính Handled là true.
Để đầu vào chỉ là số, bạn cần cho phép một cú nhấn phím chỉ khi nó tương ứng với một số (0 đến 9) hoặc một phím điều khiển đặc biệt (như phím delete hoặc mũi tên). Ký tự vừa nhấn được cấp cho sự kiện KeyPress thông qua thuộc tính KeyPressEventArgs.KeyChar. Bạn có thể sử dụng hai phương thức tĩnh của lớp System.Char là IsDigit và IsControl để kiểm tra nhanh ký tự.
Dưới đây là phương thức thụ lý sự kiện mà bạn sẽ sử dụng để ngăn đầu vào không phải số:
Chú ý rằng đoạn mã này bỏ qua dấu phân cách thập phân. Để cho phép ký tự này, bạn cần sửa lại đoạn mã như sau:Visual C# Code:
Visual C# Code:
// Lấy ký tự phân cách thập phân trên nền này // ("." đối với US-English). {} else { }
Đoạn mã này chỉ cho phép một dấu phân cách thập phân, nhưng nó không giới hạn số chữ số có thể được dùng. Nó cũng không cho phép nhập số âm (bạn có thể thay đổi điều này bằng cách cho phép dấu trừ “-” là ký tự đầu tiên). Nhớ rằng, đoạn mã này cũng giả định bạn đã nhập không gian tên System.Threading.
Trích từ "Các giải pháp lập trình C#"
Xài "mặt nạ" (mask.. gì gì đấy không nhớ )không nhanh hơn sao ?
Đã được chỉnh sửa lần cuối bởi phanvankhai : 21-01-2007 lúc 01:30 PM.
Mình cũng đang thử làm bài có kiểu như này. Nếu dùng mặt nạ như phanvankhai thì ko biết có được không, nhưng trong trường hợp tổng quát, muốn sử dụng textbox để nhạp và kiểm tra dữ liệu theo những điều kiện rất phức tạp thì làm thế nào???
Ý mình định sẽ tạo 1 class thừa kế từ textbox, rồi thực hiện override cái hàm KeyDown. Nhưng mà mình chưa làm được.
Các bạn có thể chỉ cho mình một số vấn đề này không:
- Sau khi có class thừa kế từ lớp TextBox rồi, ví dụ: class classA: TextBox thì hàm tạo của lớp đó, chúng ta có cần gọi TextBox(); hay không? Hay là khi khai báo thế, thì classA đã nó đã tự động gọi hàm tạo của TextBox rồi??
- Sau khi có được classA, mình đem vào chương trình chính và gọi, nhưng ko được. Mình đã sử dụng các lệnh sau:
private classA txtBox1;//trong ham InitComponent gì đó
txtBox1=new classA();
txtBox1.Location=new Point(10,10);
txtBox1.Size=new Size(100,15);
txtBox1.Víible=true;
Nhưng mà chẳng có cái gì hiện ra cả. Thành ra mình cũng chằng biết các hàm override hoạt động thế nào nữa.
Các bạn làm ơn chỉ cho mình với. Mình mới học nên rất dốt.
Mình đã tìm được câu trả lời rồi:
- Không cần gọi hàm tạo của TextBox
- Cần thêm 1 lệnh nữa thì cái textbox kế thừa mới hiện ra: this.Controls.Add(textBox1);
Hi hi, vui quá
Quả là một ý tưởng hay và rất thực tế
Cảm ơn bạn đã chia sẻ
Cái này bạn có thể sài MaskedTextBox hoặc nếu không thì sài thằng IntegerInput(Chỉ cho phép nhập số nguyên) hoặc DoubleInput(Chỉ cho phép nhập số Double) của thằng DotnetBar...Hoặc không thì sài như cách của bạn. Cách này tạm chấp nhận được, thường những người có kinh nghiệm rồi sẽ ko sử dụng cách của bạn đâu ha !
Vấn đề này đã nói nhiều rồi mà! Xem ở mục project có người đã làm cái này đấy.Cách của mấy người nói chỉ chặn ko cho gõ số vào chứ ko ngăn dc user paste số vào,cần phải kiểm tra trong clipboart xem nó là dạng số hay ko rồi chặn việc paste số nữa
Cánh Chym ứ mỏi
Cách kiểm tra clipboard như thế nào bác ? Bác chỉ giúp em với ?
dùng masktextbox , set mask là numeric thì cho dù paste,gõ,dùng code thì nếu có letter trong đó thì đều bị bật ra hết mà
còn cách nữa cũng đơn giản là sử dụng hàm TryParse
giả sử tôi cần kiểm tra xem số liệu nhập vào textbox6 có phải là integer ko ? tôi làm như sau :
Visual C# Code:
mọi người nhớ lấy cái hàm này nhé TryParse
các kiểu dữ liệu khác (double,float,DateTime,long....vv )cũng check in tuơng tự
chúc vui vẻ
thanks nhìu nha',đúng thứ mihf cần
cho mình hỏi:làm thế nào để khi mìh điền số vào trong tetbox,mấy button chuyển từ ẩn sang bật sáng vậy
bbạn ơi cho mìh hỏi,khi nhap ký tự vào tetbox minh muốn nó thông báo là "phải nhap số " thì fải viết code tn.thanhks nhìu
Đã được chỉnh sửa lần cuối bởi Yin Yang : 29-01-2011 lúc 02:45 PM. Lý do: Nhập bài
Men talk of killing time, while time quietly kills them.
Time is what we want most, but what we use worst.
------------------------------
YinYang's Programming Blog