根据所选类型验证对简单文本框的输入

时间:2017-06-12 12:28:38

标签: c# dynamic textbox

我正在为我更新的一年做一些准备,我有点陷入混乱,我无法解决。如果你看下面的图片:

This picture

你可以看到我有一个文本框,我无法弄清楚如何使它只接受某些字符,例如0-7 sans 8和9 for octal。

到目前为止,这是我的代码:

COUNT(DISTINCT r.stars)

我也尝试过这样的事情:

private void inputBox_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (hexRadioButton.Checked)
        {
            if (char.IsWhiteSpace(e.KeyChar))
            {
                e.Handled = true;
            }
        }
        if (decimalRadioButton.Checked)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) ||  char.IsWhiteSpace(e.KeyChar))
            {                    
                e.Handled = true;
            }
        }

        if (octalRadioButton.Checked)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) ||  char.IsWhiteSpace(e.KeyChar))
            { 
                e.Handled = true;
            }
            e.Handled = false;
        }

        if (radioButton1.Checked)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) || char.IsWhiteSpace(e.KeyChar))
            {
                e.Handled = true;
            }
            e.Handled = false;
        }
    }

但这几乎没有。

1 个答案:

答案 0 :(得分:2)

我认为最大的问题在于:

if (octalRadioButton.Checked)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) ||  char.IsWhiteSpace(e.KeyChar))
    { 
        e.Handled = true;
    }
    e.Handled = false; <----------
}

将其设置为true后,再次将其设置为false ...这就是为什么它允许您输入无效字符。

所以删除该行。

第二个问题是你接受所有数字,包括8和9.为了解决这个问题,我会做这样的事情:

var validChars = new[] {'1', '2', '3', '4', '5', '6', '7'};
if (!validChars.Contains(e.KeyChar)) {
    e.Handled = true;
}

您也可以将此方法用于其他基础。

编辑:

实际上,我只是查看了文档,而Handled显然无效。您需要SuppressKeyPress属性,并在KeyDown事件中将其设置为true。