c# -在文本框中禁用键盘输入
本文关键字:键盘 输入 文本 | 更新日期: 2023-09-27 18:02:47
我试图禁用所有输入文本框的按键,除了以下内容:
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);
}
}
无论如何有它,所以当按下时,键盘上的所有键(除了数字和句号按钮)不注册(或禁用)键的实际值和输入什么?
使用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;
}
}
有两种方法:
-
等待用户输入完数据,然后使用
double.TryParse()
确保它是一个有效的数字 -
使用文本框的KeyPress事件在每个键被按下时验证数据
看看这里:简单数字文本框
编辑:由于其他答案解释了如何处理OnKeyPress/OnKeyDown事件,本文演示了如何处理其他场景,如粘贴文本,所以我将保留这个答案。您应该连接到KeyDown
和KeyPress
事件,以防止输入不需要的字符。MSDN上有一个示例
许多第三方控件库也内置了这种功能,如果您发现自己使用其中一个的话
更好的做法是允许输入任何内容,但通过错误提供程序提供关于失败验证的通知(valididating事件和double.TryParse())。
但如果你坚持,一定要替换'。',加上系统的小数分隔符。如果你不假设所有的值都是英文的,你很容易陷入不能输入小数的问题。
例如,我在克罗地亚,这里我们必须键入逗号(,)。在一些伊斯兰国家,我不记得小数分隔符是散列(#)。
所以要注意本地化问题
下面的代码将抑制除数字、退格和小数点以外的所有字符。它也只允许一个小数作为数字项。
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;
}
}
也可以使用
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != ''b' && e.KeyChar != '.'){
e.Handled = true;}
使text/cmb框只读的最短修复,将以下内容附加到相应的按键事件:
private void cmbDisable_KeyPress(object sender, KeyPressEventArgs e)
{
e.KeyChar = (char)(0);
}