位置:海鸟网 > IT > ASP.NET >

一个数字文本框控件,我觉得思路蛮不错的

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Diagnostics;

namespace UtilityLibrary
{
    /// <summary>
    /// Summary description for NumericTextBox.
    /// </summary>
    public class NumericTextBox : System.Windows.Forms.TextBox
    {
        private int minimum = -1;
        private int maximum = -1;
        private bool useRange = false;
        private string lastChar;
        
        public NumericTextBox()
        {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
        }

        public Size SetRange
        {
            get
            {
                if ( useRange )
                    return new Size(minimum, maximum);
                else
                    return new Size(-1, -1);
            }
            set
            {
                minimum = value.Width;
                maximum = value.Height;
                useRange = true;
            }
            
        }

        private void InitializeComponent()
        {
            //
            // NumericTextBox
            //
            this.TextChanged += new System.EventHandler(this.NumericTextBox_TextChanged);
        
        }

    

        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            // Allow only numeric characters
            base.OnKeyPress(e);
            if ( Char.IsLetter(e.KeyChar) || Char.IsPunctuation(e.KeyChar) || Char.IsSeparator(e.KeyChar) )
                e.Handled = true;
            else
            {
                e.Handled = false;
            }
        }
                

        private void NumericTextBox_TextChanged(object sender, System.EventArgs e)
        {
            if ( useRange )
            {
                if ( Text != "" )
                {
                    int val = Convert.ToInt32(Text);
                    if ( val > maximum )
                    {
                        Text = maximum.ToString();
                    }
                    else if ( val < minimum )
                    {
                        Text = minimum.ToString();
                    }

                    if ( Text.Length == 1 )
                    {
                        // If use delete the last character remaining
                        // remember it so that if the user jumps to another
                        // edit control we can put back the last digit so that
                        // we don't have an empty numeric control which is not good
                        lastChar = Text;
                    }

                }

            }
        }


        
        protected override void OnLostFocus(EventArgs e)
        {
            base.OnLostFocus(e);
            if ( Text.Length == 0 && useRange )
            {
                Text = lastChar;
            }
        }
            

    }
}