BinGoo教学之《TextBox只能输入时间》 简介: 利用TextBox制作时间输入框
说明: 虽然系统有一个MaskedTextBox,但是感觉不太好用,今天给你们的教学是利用TextBox的KeyPress事件来限制输入时间格式的文本。类似于DateTimePicker的手动输入时间样式。
效果截图: 1.这里显示的效果如下图所示
2.整体运行效果如下GIF动画所示 教程代码: [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;
} |