我正在尝试禁用输入到文本框中的所有击键,但以下情况除外:
0 1 2 3 4 5 6 7 8 9。 (因此除了数字和“。”之外的所有键都应被禁用)
现在我有以下代码,但它只检查是否输入了一个字母作为第一个值(更不用说它真的很草率):
private void yDisplacementTextBox_TextChanged(object sender, EventArgs e)
{
if (yDisplacementTextBox.Text.ToUpper() == "A" || yDisplacementTextBox.Text.ToUpper() == "B" || yDisplacementTextBox.Text.ToUpper() == "C" ||
yDisplacementTextBox.Text.ToUpper() == "D" || yDisplacementTextBox.Text.ToUpper() == "E" || yDisplacementTextBox.Text.ToUpper() == "F" ||
yDisplacementTextBox.Text.ToUpper() == "G" || yDisplacementTextBox.Text.ToUpper() == "H" || yDisplacementTextBox.Text.ToUpper() == "I" ||
yDisplacementTextBox.Text.ToUpper() == "J" || yDisplacementTextBox.Text.ToUpper() == "K" || yDisplacementTextBox.Text.ToUpper() == "L" ||
yDisplacementTextBox.Text.ToUpper() == "M" || yDisplacementTextBox.Text.ToUpper() == "N" || yDisplacementTextBox.Text.ToUpper() == "O" ||
yDisplacementTextBox.Text.ToUpper() == "P" || yDisplacementTextBox.Text.ToUpper() == "Q" || yDisplacementTextBox.Text.ToUpper() == "R" ||
yDisplacementTextBox.Text.ToUpper() == "S" || yDisplacementTextBox.Text.ToUpper() == "T" || yDisplacementTextBox.Text.ToUpper() == "U" ||
yDisplacementTextBox.Text.ToUpper() == "V" || yDisplacementTextBox.Text.ToUpper() == "W" || yDisplacementTextBox.Text.ToUpper() == "X" ||
yDisplacementTextBox.Text.ToUpper() == "Y" || yDisplacementTextBox.Text.ToUpper() == "Z")
{
MessageBox.Show("Please enter a numeric value for the Y Displacement.", "Y Displacement: Numbers Only Error",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
如果有这样的话,按下时,键盘上的所有键(数字和句点按钮除外)都不会注册(或禁用)键的实际值而不输入任何内容?
答案 0 :(得分:5)
使用textBox1.KeyPress += textBox1_KeyPress
此代码仅允许数字和.
以及退格。
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar > (char)Keys.D9 || e.KeyChar < (char)Keys.D0) && e.KeyChar != (char)Keys.Back && e.KeyChar != '.')
{
e.Handled = true;
}
//Edit: Alternative
if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back && e.KeyChar != '.')
{
e.Handled = true;
}
}
答案 1 :(得分:1)
有两种方法可以尝试解决这个问题:
等待用户完成输入数据,然后使用double.TryParse()
确保它是有效数字。
使用TextBox的KeyPress事件在按下每个键时验证数据。
答案 2 :(得分:0)
编辑:由于其他答案解释了如何处理OnKeyPress / OnKeyDown事件,本文将演示如何处理其他方案,如粘贴文本,因此我将保留此答案。
答案 3 :(得分:0)
您应该挂钩KeyDown
和KeyPress
事件以防止输入不需要的字符。有一个sample on MSDN
答案 4 :(得分:0)
如果您发现自己使用其中一种,许多第三方控件库也内置了这种功能。
答案 5 :(得分:0)
更好的做法是允许输入任何内容,但通过错误提供程序通知失败的验证(Validating event和double.TryParse())。
但如果你坚持,一定要更换'。'使用系统的小数分隔符。如果您不假设所有值都是英语,则可以轻松进入无法输入小数值的问题。
例如,我在克罗地亚,在这里我们必须输入一个逗号(,)。在一些伊斯兰国家,我记不起小数点分隔符是一个哈希(#)。
请注意本地化问题。
答案 6 :(得分:0)
以下代码将禁止除数字,退格和小数之外的所有代码。它也只允许一个十进制数字输入。
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar > (char)Keys.D9 || e.KeyChar < (char)Keys.D0) && e.KeyChar != (char)Keys.Back && e.KeyChar != '.')
{
e.Handled = true;
return;
}
if(e.KeyChar == '.' && textBox1.Text.Contains('.'))
{
e.Handled = true;
}
}
答案 7 :(得分:0)
也可以使用
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != '\b' && e.KeyChar != '.'){
e.Handled = true;}
答案 8 :(得分:0)
最短的修复程序,使文本/ cmb框为只读,将以下内容附加到相应的按键事件:
private void cmbDisable_KeyPress(object sender, KeyPressEventArgs e)
{
e.KeyChar = (char)(0);
}