我当前正在使用一个自定义控件,该控件允许用户输入小数或时间格式(hh:mm)。因此,我想如果TextBox
包含一个句点(。),则用户将不再添加/输入冒号(:),反之亦然。
我在下面有此代码,因此用户只能输入数字,句点和冒号。
private void txtTime_KeyPress(object sender, KeyPressEventArgs e)
{
if ((!char.IsControl(e.KeyChar) & !char.IsDigit(e.KeyChar) & !(Convert.ToString(e.KeyChar) == ".") & !(Convert.ToString(e.KeyChar) == ":")))
{
e.Handled = true;
}
else
{
//only allow one '.' & ':'
if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
{
e.Handled = true;
}
else if (e.KeyChar == ':' && (sender as TextBox).Text.IndexOf(':') > -1)
{
e.Handled = true;
}
}
}
所以我的问题是,我将如何做?
有人可以帮我吗?预先感谢。
答案 0 :(得分:1)
对于操作员来说,如果他们键入了某些内容并且想要更正它,则是令人讨厌的事情,但他们不能这样做,因为其中有不正确的点或分号。
假设操作员尝试键入14:38:21
,但键入:
14.38
“哦,不,这是错误的,我想要14.38:21!所以让我们首先继续输入:21
,然后再返回以将点变成冒号!”
想象一下操作员在无法键入:21
时不知所措,并且不理解为什么
在Windows表单中,仅当操作员表示完成编辑输入时,才验证输入的输入。
因此,请使用TextBox.OnValidating
。调用此命令时,您可以接受或拒绝输入,并告诉操作员出了什么问题。
protected override void OnValidating (CancelEventArgs e)
{
e.Cancel = this.IsInputErrorDetected;
if (e.Cancel)
{
this.DisplayInputProblem();
}
}
加分点:也适用于复制粘贴。
答案 1 :(得分:0)