作者: Blue_Pen
查看: 6225|回复: 16

[教程] 【C#TextBox输入时间】TextBox只能输入时间

[复制链接]
Blue_Pen 发表于 2015-7-15 16:03:54 | 显示全部楼层 |阅读模式
查看: 6225|回复: 16
BinGoo教学之《TextBox只能输入时间》
简介:
利用TextBox制作时间输入框

说明:
虽然系统有一个MaskedTextBox,但是感觉不太好用,今天给你们的教学是利用TextBox的KeyPress事件来限制输入时间格式的文本。类似于DateTimePicker的手动输入时间样式。

效果截图:
1.这里显示的效果如下图所示

【C#TextBox输入时间】TextBox只能输入时间

【C#TextBox输入时间】TextBox只能输入时间

2.整体运行效果如下GIF动画所示

【C#TextBox输入时间】TextBox只能输入时间

【C#TextBox输入时间】TextBox只能输入时间
教程代码:
[C#] 纯文本查看 复制代码
        private void txtPrice_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (dtCell == null)
            {
                return;
            }
            string oldtxt = textBox1.Text;
            if (oldtxt.Length > 5)
            {
                e.Handled = true;
            }
            int cursorPos = textBox1.SelectionStart;
            if (cursorPos == 2)
            {
                cursorPos = 3;
            }
            System.Text.RegularExpressions.Match match;
            switch (cursorPos)
            {
                case 0:
                    if (e.KeyChar.ToString() == "2")
                    {
                        if(int.Parse(oldtxt.Substring(1, 1))> 3)
                        {
                            //小时最大是24小时,输入的小时单位上十位的数字如果是2,那么小时单位上个位的数字不能大于3,默认变成0
                            oldtxt = oldtxt.Substring(0, 1) + "0" + oldtxt.Substring(2, oldtxt.Length - 2);
                        }
                    }
                    match = System.Text.RegularExpressions.Regex.Match(e.KeyChar.ToString(), "[0-2]");
                    break;
                case 1:
                    if (oldtxt.Substring(0, 1) != "2")
                    {
                        //小时最大是24小时,如果小时单位上十位的数字不是2,那么小时单位上个位的数字可以为0~9
                        match = System.Text.RegularExpressions.Regex.Match(e.KeyChar.ToString(), "[0-9]");
                    }
                    else
                    {
                        //小时最大是24小时,如果小时单位上十位的数字是2,那么小时单位上个位的数字可以为0~3
                        match = System.Text.RegularExpressions.Regex.Match(e.KeyChar.ToString(), "[0-3]");
                    }
                    
                    break;
                case 3:
                    //分钟最大是59分钟,所以分钟单位上十位的数字只能是0~5
                    match = System.Text.RegularExpressions.Regex.Match(e.KeyChar.ToString(), "[0-5]");
                    break;
                case 4:
                    //分钟最大是59分钟,所以分钟单位上个位的数字只能是0~9
                    match = System.Text.RegularExpressions.Regex.Match(e.KeyChar.ToString(), "[0-9]");
                    break;
                default:
                    match = System.Text.RegularExpressions.Regex.Match("x", "[0-2]");
                    break;
            }
            if (match.Success)
            {
                string s = oldtxt.Substring(0, cursorPos) + e.KeyChar.ToString() +
                    oldtxt.Substring(cursorPos + 1, oldtxt.Length - cursorPos - 1);
                dtCell.Text = s;
                textBox1.Text = s;
                //如果光标在小时的个位的位置上则直接跳到分钟十位的位置上
                textBox1.Select(cursorPos + (cursorPos!=1?1:2), 1); 
            }
            e.Handled = true;
           
        }

评分

参与人数 1金钱 +3 收起 理由
乔克斯 + 3 感谢分享,LZ辛苦了~

查看全部评分

回复 论坛版权

使用道具 举报

乔克斯 发表于 2015-7-15 17:26:10 | 显示全部楼层
来踩踩。
回复

使用道具 举报

忧郁之子 发表于 2015-7-16 22:10:17 | 显示全部楼层
看着不错,支持了。
成信之子 发表于 2015-8-9 12:05:43 | 显示全部楼层
谢谢分享。。。。。。。。
回复

使用道具 举报

Edward 发表于 2015-8-16 21:49:23 | 显示全部楼层
谢谢分享!!!
回复

使用道具 举报

王者VIP 发表于 2015-9-28 09:04:54 | 显示全部楼层
这个太好了
seling 发表于 2015-10-21 13:05:19 | 显示全部楼层

楼主辛苦了  学习了

Even 发表于 2015-12-5 11:09:13 | 显示全部楼层
讚哦 參考一下
zjwzcx 发表于 2016-1-25 10:37:17 | 显示全部楼层
看着不错,支持了。
JJboon 发表于 2016-5-18 07:58:27 | 显示全部楼层
这个可以套用在IP输入
您需要登录后才可以回帖 登录 | 加入CSkin论坛

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2019-7-24 12:44, Processed in 0.912928 second(s), 34 queries , Gzip On.

快速回复 返回顶部 返回列表