仅在文本框中指定char输入+才能使用快捷方式

时间:2011-11-14 22:12:58

标签: c# winforms textbox shortcuts

我希望在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

编辑2

我是在winForms应用程序中完成的。

6 个答案:

答案 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)

请参阅:http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b95b5197-e695-4e46-ae0c-9575c7c80c5b/

您可以使用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继承的地方进行自己的控制。