一個數字文字框控制項,我覺得思路蠻不錯的

來源:互聯網
上載者:User
控制項|文字框 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;
            }
        }
            

    }
}


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。