如何在Windows Foms TextBox中看到键盘之前将键盘限制为仅限于数字?

时间:2018-05-20 01:45:07

标签: c# winforms ms-office vsto office-addins

我的应用程序要求输入一个数字,该数字应限制为:

我相信通过使用TextChanged WinForms事件,我找到了实施大多数要求的正确方法。

我需要帮助的部分是防止看到任何非数字击键,即使是在几分之一秒内。需要某种回声消除/替换。

1 个答案:

答案 0 :(得分:0)

您可以使用NumericUpDown控件或MaskedTextBox控件(MSDN文档Walkthrough使用它),也可以使用自定义控件,例如此CodeProject MaskedEdit控件或另一个:FlexMaskEditBox

以下是与您的问题相关的手动实施:

首先,将TextBox MaxLenght属性设置为3,这样就可以将输入限制为最多3个数字。

过滤用户Keypress只接受Digits和BackSpace:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar != (char)Keys.Back & !char.IsDigit(e.KeyChar))
        e.Handled = true;
}

确保未在第一个位置插入Keys.D0

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.D0)
    {
        if (textBox1.Text.Length == 0 || textBox1.SelectionStart == 0)
            e.SuppressKeyPress = true;
    }
}

反粘贴:如果插入的文字无法翻译为TextBox,则拒绝对Integer文字进行突然更改。
删除错误位置的0和其他非数字字符:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    if (textBox1.Text.Length > 0)
    {
        if (textBox1.Text.Substring(0, 1) == "0")
            textBox1.Text = textBox1.Text.Substring(1);
        else
            if (!int.TryParse(textBox1.Text, out int Number))
            textBox1.Text = string.Empty;
    }
}