在文本框中仅允许使用字母数字

Sau*_*ron 16 .net c# regex wpf alphanumeric

我有一个文本框,应该禁止输入任何特殊字符.

用户可以输入:

  1. AZ
  2. AZ
  3. 0-9
  4. 空间

我怎样才能让KeyDown活动做到这一点?

Mus*_*sis 31

处理KeyDown或KeyPress事件是一种方法,但程序员通常会忘记用户仍然可以将无效文本复制并粘贴到文本框中.

一种更好的方法是处理TextChanged事件,并删除那里的任何违规字符.这有点复杂,因为您必须跟踪插入位置并在更改框的Text属性后将其重新设置到适当的位置.

根据应用程序的需要,我只需让用户输入他们想要的内容,然后在用户尝试提交时标记文本框(将文本变为红色或其他内容).

  • +1用于在文本框中提及用户"复制粘贴". (4认同)

Who*_*ich 18

只是想通过搜索为这些结尾的人添加一些代码:

private void Filter_TextChanged(object sender, EventArgs e)
{
    var textboxSender = (TextBox)sender;
    var cursorPosition = textboxSender.SelectionStart;
    textboxSender.Text = Regex.Replace(textboxSender.Text, "[^0-9a-zA-Z ]", "");
    textboxSender.SelectionStart = cursorPosition;
}
Run Code Online (Sandbox Code Playgroud)

这是一个更改过滤器,因此处理复制和粘贴,并保留光标位置,以便更改中间的文本正常工作.

请注意,它使用'sender'来获取控件名称,允许将这一个函数链接到多个文本框框,假设它们需要相同的过滤器.您可以通过转到控件的事件部分并手动选择TextChanged事件的函数来链接多个控件.


Gis*_*shu 9

使用正则表达式过滤掉其他字符.或者使用Char.IsDigit,IsXXX方法过滤掉不需要的字符.有很多方法可以做到这一点.

更新:如果您必须使用KeyDown,那么您似乎还需要处理KeyPressed并设置obEventArgs.Handled = true以禁止字符.请参阅KeyDown MSDN页面上的示例

更新:现在您指定它的WPF.以下代码仅允许在文本框中输入az和AZ字符.根据需要延长......

private void _txtPath_KeyDown(object sender, KeyEventArgs e)
      {
         if ((e.Key < Key.A) || (e.Key > Key.Z))
            e.Handled = true;
      }
Run Code Online (Sandbox Code Playgroud)

如果您将内容复制粘贴到文本框中,这将会中断.一旦用户离开控件或者当他点击OK/Submit时,验证整个文本,如MusicGenesis所说.

  • 我刚刚发现你实际上可以将Key值与其他操作数进行比较= ...非常感谢,非常方便! (3认同)

小智 3

private void _txtPath_KeyDown(object sender, KeyEventArgs e)
  {
     if ((e.Key < Key.A) || (e.Key > Key.Z))
        e.Handled = true;
  }
Run Code Online (Sandbox Code Playgroud)