Trang 1 trên tổng số 4 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 37 kết quả

Đề tài: Chỉ cho phép nhập số vào TextBox - trong C#

  1. #1
    No Avatar
    dvbendoi Khách

    Post Chỉ cho phép nhập số vào TextBox - trong C#

    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ố:
    Visual C# Code:
    1. private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
    2. {
    3.  
    4.     if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
    5.     {
    6.         e.Handled = true;
    7.     }
    8. }
    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:
    1. // Lấy ký tự phân cách thập phân trên nền này
    2. // ("." đối với US-English).
    3. string decimalString = Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator;
    4. char decimalChar = Convert.ToChar(decimalString);
    5.  
    6. if (Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar)) {}
    7. else if (e.KeyChar == decimalString && textBox1.Text.IndexOf(decimalString) == -1)
    8. {}
    9.     e.Handled = true;
    10. }

    Đ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#"

  2. #2
    Ngày gia nhập
    08 2006
    Bài viết
    51

    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.

  3. #3
    Ngày gia nhập
    12 2006
    Bài viết
    7

    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á

  4. #4
    Ngày gia nhập
    02 2009
    Bài viết
    1

    Quả là một ý tưởng hay và rất thực tế
    Cảm ơn bạn đã chia sẻ

  5. #5
    Ngày gia nhập
    04 2009
    Bài viết
    108

    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 !

  6. #6
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Mặc định Chỉ cho phép nhập số vào TextBox - trong C#

    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

  7. #7
    Ngày gia nhập
    01 2008
    Bài viết
    10

    Cách kiểm tra clipboard như thế nào bác ? Bác chỉ giúp em với ?

  8. #8
    Ngày gia nhập
    04 2009
    Nơi ở
    Gầm cầu
    Bài viết
    2,230

    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:
    1. int n = 0;
    2. if (int.TryParse(this.textBox6.Text, out n))
    3. {
    4.     MessageBox.Show("dung la so nguyen");
    5. }
    6. else MessageBox.Show("khong phai so nguyen");

    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ẻ

  9. #9
    Ngày gia nhập
    05 2010
    Bài viết
    13

    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

  10. #10
    Ngày gia nhập
    06 2009
    Nơi ở
    Cái hộp
    Bài viết
    1,255

    Trích dẫn Nguyên bản được gửi bởi pham hiep Xem bài viết
    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
    btn.Enable=TryParse(txt)
    Trích dẫn Nguyên bản được gửi bởi pham hiep Xem bài viết
    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
    if(!TryParse(txt))
    MsgBox "nhập số zô"
    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

Các đề tài tương tự

  1. Chỉ cho phép nhập số vào textbox trong lập trình C#
    Gửi bởi neverland87 trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 60
    Bài viết cuối: 09-11-2014, 02:19 PM
  2. Game Cách nhập chữ vào textbox trong XNA
    Gửi bởi viet013 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 11-04-2012, 07:22 PM
  3. Trả lời: 14
    Bài viết cuối: 10-10-2011, 03:58 PM
  4. Code cho ẩn kí tự khi nhập password vào textbox trong form đăng nhập
    Gửi bởi mrkiemhiep trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 16-03-2011, 11:10 PM
  5. Chỉ cho nhập số vào textbox trong lập trình C#?
    Gửi bởi ngoctuqb trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 24-11-2008, 09:40 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn