Thiết lập chỉ cho nhập ký tự số vào ô textbox trong C#

vào lúc 21:42
Thiết lập cho textbox nhập các ký tự số là rất cân thiết trong lập trình. Khi bạn muốn xây dựng ứng dụng mà bạn muốn ô textbox chỉ cho phép nhập theo đúng định dạng của bạn là nhập các ký tự số, để khi thực thi lệnh tính toán hay chuyển đổi sang số không bị lỗi chương trình. Trong C# các 3 sự kiện giúp bạn dễ dàng thiết lập. Đó là các sự kiện KeyPress, Validating, TextChanged.

-KeyPress: làm nhiệm vụ cho text box chỉ nhập ký tự mà bạn thiết lập trong sự kiện này.
- Validating : kiểm tra xem có nhập dữ liệu theo bạn thiết lập hay không (dùng trong trường hợp paste)
- TextChanged: lọc bỏ ký tự mà bạn không muốn trong trường hợp Paste hoặc kết thúc thoát ra khỏi Textbox

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Nhap_Ky_Tu_So
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //Hàm làm nhiệm vụ cho text box chỉ nhập ký tự số cho các textbox
        private void KeyPressNumber(object sender, KeyPressEventArgs e)
        {
            char keycode = e.KeyChar;
            int c = (int)keycode;
            // Kiểm tra ký tự vừa nhập vào có phải là các số nằm trong khoảng
            // 0..9 hoặc ký tự "." hoặc "-" hoặc "Backspace"
            if ((c >= 48) && (c <= 57) || (c == 45) || (c == 46) || (c == 8))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Chỉ được nhập ký tự số", "Thông báo");
            }
        }
        //Hàm này kiểm tra xem có nhập dữ liệu có ký tự chữ hay không (dùng trong trường hợp paste)
        private void txt_Validating(object sender, CancelEventArgs e)
        {
            //Nếu dữ liệu trống
            if (((TextBox)sender).Text == "")
            {
                MessageBox.Show("Dữ liệu không được trống", "Lỗi nhập dữ liệu", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                ((TextBox)sender).Text = "0";
            }
            else
            {
                for (int i = 0; i < ((TextBox)sender).Text.Length; i++)
                {
                    //int c = (int)Convert.ToChar(((TextBox)sender).Text[i]);
                    //if ((c <= 48) && (c >= 57))
                    if (!char.IsDigit(((TextBox)sender).Text[i]) && ((TextBox)sender).Text[i] != '.' && ((TextBox)sender).Text[i] != '-')
                    {
                        ((TextBox)sender).Text = "0";
                        MessageBox.Show("Không được nhập ký tự chữ", "Lỗi nhập dữ liệu", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        break;
                    }
                }
            }
        }
        //Hàm này để lọc bỏ ký tự chữ khi paste cho các textbox
        private void txt_TextChanged(object sender, EventArgs e)
        {
            //This handles if they paste crap in the textbox since that doesn't fire the KeyDown event
            TextBox tb = (sender as TextBox);
            double i;
            if (!string.IsNullOrEmpty(tb.Text) && !double.TryParse(tb.Text, out i))
            {
                StringBuilder sb = new StringBuilder();
                for (int i1 = 0; i1 < tb.Text.Length; i1++)
                {
                    if (char.IsNumber(tb.Text[i1]) || tb.Text[i1] == '.' || tb.Text[i1] == '-')
                        sb.Append(tb.Text[i1]);
                }
                tb.Text = sb.ToString();
            }
        }
        //Thiết lập khi mới chạy Form
        private void Form1_Load(object sender, EventArgs e)
        {
            //Khi nhập từng ký tự nếu là ký tự chữ thì thông báo lỗi
            textBox1.KeyPress += new KeyPressEventHandler(KeyPressNumber);
            //Khi kết thúc thoát khỏi textbox thì kiểm tra lại có phải là chữ số không
            textBox1.Validating += new CancelEventHandler(txt_Validating);
            //Lọc khi copy nếu có ký tự chữ thì loại bỏ
            textBox1.TextChanged += new EventHandler(txt_TextChanged);
        }

    }
}

Giao diện chương trình khi chạy bạn nhập khác ký tự số

Mã nguồn chương trình bạn tải về ở đây.

Bài tiếp theo để kết hợp với bài này đó là Kiểm tra địa chỉ email của dịch vụ Yahoo có tồn tại hay không bằng C#
Hãy like nếu bài viết có ích →
Kết bạn với gisgpsrs trên Facebook để nhận bài viết mới nóng hổi

3 nhận xét:

  1. :d, thanks so much! cảm ơn quan nhé!
    mời quan sang blog của mình dạo 1 vòng :D
    lovely dogs

    Trả lờiXóa
  2. Cám ơn bài viết của bạn rất nhiều!

    Trả lờiXóa