我正在为我更新的一年做一些准备,我有点陷入混乱,我无法解决。如果你看下面的图片:
你可以看到我有一个文本框,我无法弄清楚如何使它只接受某些字符,例如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;
}
}
但这几乎没有。
答案 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。