网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > ASP.Net精品代码 > 正文

关于强制让一个TextBox控件只能输入数字(含小数)的方法

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

原帖及讨论:http://bbs.bccn.net/thread-171545-1-1.html

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国  http://www.bc-cn.net
*/ 作者: C_B_Lu        QQ:184118549
*/ 时间: 2007-9-20  编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


自已尝试过很多次﹐每次都不是很理想﹐现在尝试将其做成一个用户控件﹐与大家分享﹐同时希望大家能提供出更好的方法﹒

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

namespace WinERP
{
    public partial class UC_DecimalTextBox : UserControl
    {
        private int intLength = 3;    // 整数部份的长度
        private int decimalLength = 2;    // 保留小数的位数
        private ErrorProvider errorProvider;    // 用于显示错误信息的ErrorProvider控件

        [Description("设置整数部份的长度(在1~100之间)")]
        public int IntLength
        {
            get { return intLength; }
            set
            {
                try
                {
                    if (value < 1)
                    {
                        intLength = 1;
                        throw new Exception("整数部份的长序必须是1~100之间");
                    }
                    else if (value > 100)
                    {
                        intLength = 100;
                        throw new Exception("整数部份的长序必须是1~100之间");
                    }
                    else
                    {
                        intLength = value;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    if (decimalLength == 0)
                    {
                        textBox1.MaxLength = IntLength;
                    }
                    else
                    {
                        textBox1.MaxLength = intLength + decimalLength + 1;
                    }
                }
            }
        }

        [Description("设置小数部份的长度(在0~10之间)")]
        public int DecimalLength
        {
            get { return decimalLength; }
            set
            {
                try
                {
                    if (value < 0)
                    {
                        decimalLength = 0;
                        throw new Exception("小数部份的长序必须0~10之间");
                    }
                    else if (value > 10)
                    {
                        decimalLength = 10;
                        throw new Exception("小数部份的长序必须0~10之间");
                    }
                    else
                    {
                        decimalLength = value;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    if (decimalLength == 0)
                    {
                        textBox1.MaxLength = IntLength;
                    }
                    else
                    {
                        textBox1.MaxLength = intLength + decimalLength + 1;
                    }
                }
            }
        }

        [Description("用于显示错误信息的ErrorProvider控件")]
        public ErrorProvider ErrorProvider
        {
            get { return errorProvider; }
            set { errorProvider = value; }
        }

        [Description("文本框的边框样式")]
        public BorderStyle TextBoxBorderStyle
        {
            get { return textBox1.BorderStyle; }
            set { textBox1.BorderStyle = value; }
        }

        [Description("表示如何对齐TextBox控件中的文字")]
        public HorizontalAlignment TextAlign
        {
            get { return textBox1.TextAlign; }
            set { textBox1.TextAlign = value; }
        }

        [Description("控制是否可以编辑TextBox中的文字")]
        public bool ReadOnly
        {
            get { return textBox1.ReadOnly; }
            set { textBox1.ReadOnly = value; }
        }

        [Description("文本框中的文字")]
        public override string Text
        {
            get { return textBox1.Text; }
            set { textBox1.Text = value; }
        }

        public UC_DecimalTextBox()
        {
            InitializeComponent();
        }

        // 当控件调整大小时发生
        private void UC_DecimalTextBox_Resize(object sender, EventArgs e)
        {
            textBox1.Width = this.Width - 6;
            this.Height = textBox1.Height + 6;    // 固定自定义控件的高﹐不允许调大
        }
                
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar >= ''0'' && e.KeyChar <= ''9'') || (e.KeyChar == ''\b'') || (e.KeyChar == ''.''))
            {
                e.Handled = false;    // 允许输入
                int pos = textBox1.SelectionStart;
                int intLength = textBox1.Text.Length;

                if ((intLength == textBox1.MaxLength) && (pos < textBox1.MaxLength))
                {
                    textBox1.SelectionLength = 1;
                    if ((textBox1.SelectedText == ".") && (e.KeyChar != ''.''))
                    {
                        ++textBox1.SelectionStart;
                    }
                }

                if ((e.KeyChar == ''.'') && (textBox1.Text.IndexOf(''.'') > -1))
                {
                    e.Handled = true;
                    if ((pos < IntLength - 1) && (textBox1.Text.Substring(pos, 1) == "."))
                    {
                        textBox1.SelectionStart = ++pos;
                    }
                }

                if ((decimalLength == 0) && (e.KeyChar == ''.''))    // 如果是保留零位小数﹐则不允许输入点号
                {
                    e.Handled = true;
                }
            }
            else
            {
                e.Handled = true;    // 不允许输入
            }
        }

        private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            int pos = textBox1.SelectionStart;
            string strValue = textBox1.Text.Trim();
                        
            if (decimalLength == 0)
            {  // 当文本框中只输入整数时              
                while (strValue.Substring(0, 1) == "0")
                {  // 去除整数部份最前右侧的
                    if (strValue.Length > 1)
                    {
                        strValue = strValue.Substring(1, strValue.Length - 1);
                        if (pos > 0)
                        {
                            --pos;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                textBox1.Text = strValue;
            }
            else
            {  // 当文本框用于输入小数时
                int pointPs = strValue.IndexOf(''.'');
                if (pointPs < 0)
                {
                    strValue += ".".PadRight(DecimalLength, ''0'');
                }
                if (pointPs == 0)
                {
                    strValue = "0" + strValue;
                    textBox1.SelectionStart = ++pos;
                }

                // 自动使其保留两位小数
                string strs = strValue.Split(new char { ''.'' });
                strs[0] = strs[0].Length > 0 ? strs[0] : "0";

                // 去除整数部份最前右侧的
                while (strs[0].Substring(0, 1) == "0")
                {
                    if (strs[0].Length > 1)
                    {
                        strs[0] = strs[0].Substring(1, strs[0].Length - 1);
                        if (pos > 0)
                        {
                            --pos;
                        }
                    }
                    else
                    {
                        break;
                    }
                }

                // 取得小数字数的数字,如果不足小数字长度﹐则以填补
                if (strs.Length < decimalLength)
                {
                    strs = strs.PadRight(decimalLength, ''0'');
                }

                textBox1.Text = strs[0] + "." + strs;
            }
            textBox1.SelectionStart = pos;
        }

        private void textBox1_Validating(object sender, CancelEventArgs e)
        {
            if (errorProvider == null)
            {
                return;
            }
            errorProvider.SetError(this, "");
            double dValue;
            if (!double.TryParse(textBox1.Text, out dValue))
            {
                string strMsg = string.Format("请输入整数部份不超过{0}位﹐且小数字不超过{1}位的有效数字!", IntLength, decimalLength);
                if (decimalLength == 0)
                {
                    strMsg = string.Format("请输入不超过{0}位的有效整数!", IntLength);
                }
                errorProvider.SetError(this, strMsg);
                e.Cancel = true;
            }
        }
    }
}

  • 下一篇资讯: 关于生成安装程序
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师