我希望在C#中有一个只接受数字的文本框。我这样做的方法:
private void textBoxStart_KeyPress(object sender, KeyPressEventArgs e)
{
char i = e.KeyChar;
if (!((i >= '0' && i <= '9') || i == 8))
e.Handled = true;
}
工作正常。但我想能够使用快捷方式(如ctrl + v)。我该怎么办?
我想简化我的问题。但是像“使用numericUpDown”这样的回答迫使我显示所有问题。确切的问题是能够接受所有数字,大写和小写字母。 NumericUpDown只接受数字; p
我是在winForms应用程序中完成的。
答案 0 :(得分:1)
改为使用NumericUpDown框。
答案 1 :(得分:0)
查看特定于silverlight的数字文本框。虽然它是特定于Silverlight的,但它应该适用于所有C#代码隐藏。
How to create a numeric textbox in Silverlight?
我最终使用Sameh Serag的实现并稍微修改它以设置最大/最小值。它运作得很好。
答案 2 :(得分:0)
为什么重新创造轮子?你应该check out the masked textbox in the WPF toolkit。
你应该看看this SO question。似乎与你的问题类似。
答案 3 :(得分:0)
你可以使用它,虽然这可能是一种过度杀伤......
if (Regex.IsMatch(subjectString, @"[a-z\d]", RegexOptions.IgnoreCase)) {
// Successful match
}
答案 4 :(得分:0)
您可以使用Validating或TextChanged事件处理程序在输入后验证输入。对于该任务,正则表达式应该是好的。虽然这会以某种方式中断用户体验,但这并不完美。
我可以想到不容易使用的可能性立即拒绝无效字符。你应该等到控件失去焦点或类似的东西。
然后你可以尝试使用MaskedTextBox但是Mask不能使用任意数量的字符。
答案 5 :(得分:0)
从Simple Numeric TextBox解除,这是基本的例程:
private void textBox1_KeyDown(object sender, KeyEventArgs e) {
bool numOK = ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9 ||
e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) &&
e.Modifiers != Keys.Shift);
bool editOK = ((e.Control && e.KeyCode == Keys.V) ||
(e.Control && e.KeyCode == Keys.C) ||
(e.Control && e.KeyCode == Keys.X) ||
(e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back));
bool moveOK = (e.KeyCode == Keys.Up ||
e.KeyCode == Keys.Right ||
e.KeyCode == Keys.Down ||
e.KeyCode == Keys.Left ||
e.KeyCode == Keys.Home ||
e.KeyCode == Keys.End);
if (!(numOK || editOK || moveOK)) {
e.SuppressKeyPress = true;
e.Handled = true;
}
}
当然,通过将键盘输入限制为仅数字但允许控制粘贴,您在控制最终用户粘贴的内容方面存在问题,这可能是字符串。如果需要,请仔细查看链接项目 - 您必须覆盖WndProc并拦截粘贴命令,然后检查剪贴板的内容。这将要求您在从TextBox继承的地方进行自己的控制。