Cấp bậc tác giả:

DOTNET

Xây dựng Control thừa kế từ Textbox C#

Được viết bởi QuangIT ngày 06/01/2013 lúc 09:56 PM
Viết một điều khiển thừa kế từ Textbox hỗ trợ thêm thuộc tính NumericOnly; Nếu NumericOnly = true thì sẽ bật chế độ chỉ nhập số...
  • 0
  • 4438

Xây dựng Control thừa kế từ Textbox C#


Viết một điều khiển thừa kế từ Textbox hỗ trợ thêm thuộc tính NumericOnly; Nếu NumericOnly = true thì sẽ bật chế độ chỉ nhập số như sau :

-          Chỉ cho phép nhập giá trị số hợp lệ , các giá trị số hợp lệ (là số nguyên hoặc số thực, có dấu hoặc không có dấu, vv.)

-          Nếu nhập dữ liệu không hợp lệ , chương trình thông báo lỗi và bắt nhập lại đến khi đúng

-          Một số trường hợp ngoại lệ :

o   Nếu ký tự đầu tiên là dấu bằng “=” thì text được hiểu là 1 công thức, chương trình sẽ tự động tính công thức và thay text hiện thời bằng giá trị của công thức sau khi người dùng nhấn enter hoặc thoát khỏi điều khiển nếu công thức hợp lệ ngược lại sẽ báo lỗi và yêu cầu user nhập lại

o    Có ngoại lệ với một số trường hợp, các ký tự t,n được thay thế = các cụm số 0 để tăng tốc nhập liệu cho người dùng cuối; ví dụ : 3t = 300 , 3n = 3000. Khi người dùng nhấn t thì hệ thống sẽ thay thế tự động bằng “000”

o   Dữ liệu hiển thị trên textbox phải được phân tách thành các cụm 3 số, ví dụ: 3 000 000  cho dễ đọc, với số sau dấu . thì không được phân tách, ví dụ: 200 000.12234

Coding:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Drawing;

using System.Data;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace ControlTextBoxByQuangIT

{

    public partial class TextBoxByQuangIT : TextBox

    {

        bool fPoint;

        string[] cong;

        string[] tru;

        string[] nhan;

        string[] chia;

        string first;

        string last;

        /// <summary>

        /// Contructor

        /// </summary>

        public TextBoxByQuangIT()

            : base()

        {

            InitializeComponent();

            //Đăng ký hàm xử lý sự kiện KeyPress

            this.KeyPress += new KeyPressEventHandler(OnKeyPress);

        }

 

        //Định nghĩa thuộc tính NumericOnly miêu tả chế độ làm việc

        private int intValidType = (int)NumericOnly.False;

        public NumericOnly ValidateFor

        {

            get { return (NumericOnly)intValidType; }

            set { intValidType = (int)value; }

        }

 

        /// <summary>

        /// Hàm xử lý sự kiện gõ phím KeyPress

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        protected void OnKeyPress(object sender,

         KeyPressEventArgs e)

        {

            //Xác định mã ký tự được nhập

            char ch = e.KeyChar;

            //Kiểm tra chế độ hoạt động để thực hiện

            switch (intValidType)

            {

                case (int)NumericOnly.True:

                    if (ch == '.' && fPoint == false)

                    {

                        fPoint = true; return;

                    }

                    else if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '=')

                    {

                        return;

                    }

                    else if (ch == 't')

                    {

                        this.Text = this.Text + "00";

                        e.KeyChar = (char)0;

                        return;

                    }

                    else if (ch == 'n')

                    {

                        this.Text = this.Text + "000";

                        e.KeyChar = (char)0;

                        return;

                    }

                    else if (ch == (char)13)

                    {

                        string sub = this.Text.Substring(0, this.Text.Length - (this.Text.Length - 1));

                        if (sub == "=")

                        {

                            this.Text = this.Text.Replace("=", "");

                            cong = this.Text.Split('+');

                            first = cong[0];

                            last = cong[cong.Length - 1];

                            if (cong.Length > 1)

                            {

                                this.Text = (Convert.ToInt32(first) + Convert.ToInt32(last)).ToString();

                            }

                            tru = this.Text.Split('-');

                            first = tru[0];

                            last = tru[tru.Length - 1];

                            if (tru.Length > 1)

                            {

                                this.Text = (Convert.ToInt32(first) - Convert.ToInt32(last)).ToString();

                            }

 

                            nhan = this.Text.Split('*');

                            first = nhan[0];

                            last = nhan[nhan.Length - 1];

                            if (nhan.Length > 1)

                            {

                                this.Text = (Convert.ToInt32(first) * Convert.ToInt32(last)).ToString();

                            }

 

                            chia = this.Text.Split('/');

                            first = chia[0];

                            last = chia[chia.Length - 1];

                            if (chia.Length > 1)

                            {

                                if (Convert.ToInt32(last) != 0)

                                    this.Text = (Convert.ToInt32(first) / Convert.ToInt32(last)).ToString();

                                else

                                    MessageBox.Show("Không thể chia cho 0");

                            }

                        }

                    }

                    else if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))

                    {

                        this.Text = "";

                        MessageBox.Show("Lỗi. Mời nhập lại");

                        e.KeyChar = (char)0;

                    }

                    return;

             }

        }

        /// <summary>

        /// Sử dụng enum để định nghĩa thứ tự tên sẽ xuất hiện

        /// </summary>

        public enum NumericOnly

        {

            True = 0,

            False

        }

    }

}

 

Nguồn bài viết: Dngaz.com

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML