【问题标题】:How can I capture all char's typed into a textbox as the user types?如何在用户键入时捕获所有输入到文本框中的字符?
【发布时间】:2013-04-08 00:20:37
【问题描述】:

在 C# 中,如何在用户键入时捕获所有输入到 textbox 中的 char?

因此,如果用户键入 Hello World,该函数将捕获每个单独的 char 并对其进行处理。

我需要对所有输入的文本进行超级精确的控制。我将从textbox 中删除所有无效字符,并允许用户堆叠某些字符,然后在使用其他字符时触发功能。

例子:

用户在textbox中输入以下内容

Blarg Blarg 600*50-90blarg

这就是我想要操作这个烂摊子的方式:

在读取每个 Char 时,所有字母字符都会从内存和文本框中丢弃,因此用户甚至看不到它们已输入。

所以第一部分甚至没有显示,然后当用户键入 6 时,它会粘在文本框上,然后是 0,然后是 0,所以最终显示给用户的是 600 .然后用户输入*,这会从屏幕上被丢弃,但它会触发一个函数,该函数会在文本框中获取数字并等待下一个数字。

我可以处理其中的大部分,但在 C# 中验证来自键盘的用户输入并不容易

所以问题是:我可以在每个字符上操作代码吗?因为它们位于键的右侧?

【问题讨论】:

    标签: c# winforms keyboard


    【解决方案1】:

    很简单,你可以像这样使用 KeyPress 事件:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        char c = e.KeyChar;
        // your code here
    }
    

    然后您可以像这样解析字符信息:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        char c = e.KeyChar;
    
        if (c >= 48 && c <= 57)
        {
            // numeric value
            // do something
        }
        else if (c == 42)
        {
            // multiply (*)
            // do something
        }
        else if (c == 47)
        {
            // divide (/)
            // do something
        }
        else if (c == 13)
        {
            // enter key
            // do something
        }
        else
        {
            // discard
            e.Handled = true;
        }
    }
    

    【讨论】:

    • 或者,您可以使用TextChanged,但这不会给您按下的字符。
    • 欢呼亚当,我怎样才能停止将键入的字符加载到文本框上?我真的想准确控制加载到文本框中的内容。
    • 请看我的编辑,这是你可以做到的一种方式。通过将KeyPressEventArgs.Handled 设置为true,您就是在告诉控件您已经处理了按键并且它不需要执行任何其他操作,因此它不会插入按键。
    • 您可能会发现回车键会发出烦人的声音,如果您想remove the annoying sound,请查看这篇文章。
    • fruitition 应该是一个真实的词。 :)
    【解决方案2】:

    如果您只使用文本框以仅允许输入特定字符,则可以尝试使用MaskedTextBox。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-01
      • 2014-08-23
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多