在文本框中仅允许使用1个符号

时间:2019-03-12 03:58:52

标签: c# winforms

我当前正在使用一个自定义控件,该控件允许用户输入小数或时间格式(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;
            }
        }
    }

所以我的问题是,我将如何做?

有人可以帮我吗?预先感谢。

2 个答案:

答案 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)

我不确定是否能很好地理解您的问题。 也许您正在寻找maskedTextBox,可以在其中指定用户输入的掩码。

maskedTextBox

这有一个短时间的面具HH:MM