如何防止有人在C#中的文本框中添加相同的字符?

如何防止有人在C#中的文本框中添加相同的字符?,c#,calculator,point,C#,Calculator,Point,好的,下面是场景。我正在构建一个计算器,我想阻止(计算器的)用户添加多个点(.),因为1.2.1显然不是实数,那么,我该怎么做才能在他们输入的文本框中只添加一个点呢?您可以使用TextChanged事件来验证用户输入正如Poma指出的,您可以监听TextChanged事件,并查看输入框中的内容。然后,您(基本上)有两个选择: 现场修复输入(即重置文本以确保没有错误 给出一些视觉反馈以表明有问题 我通常使用选项2,以指示错误I: 禁用任何输入选项(即OK按钮) 将文本字段的背景色更改为一些浅红色

好的,下面是场景。我正在构建一个计算器,我想阻止(计算器的)用户添加多个点(.),因为1.2.1显然不是实数,那么,我该怎么做才能在他们输入的文本框中只添加一个点呢?

您可以使用
TextChanged
事件来验证用户输入

正如Poma指出的,您可以监听TextChanged事件,并查看输入框中的内容。然后,您(基本上)有两个选择:

  • 现场修复输入(即重置文本以确保没有错误
  • 给出一些视觉反馈以表明有问题
  • 我通常使用选项2,以指示错误I:

  • 禁用任何输入选项(即OK按钮)
  • 将文本字段的背景色更改为一些浅红色
  • 使用选项1时要小心,因为通过编程更改文本也会生成文本更改事件

    private bool changingText = false;
    
    private void myTextBox_textChanged(...)
    {
       if(changingText)
          return;
    
       fixErrors();
    }
    
    private void fixErrors()
    {
        // Before changing myTextBox.Text, set the flag
       changingText = true;
       myTextBox.Text = ...
       changingText = false;
    }
    
    还有其他选择,这些只是最常见的

    编辑:

    另一个可能更好的解决方案是处理文本框的OnKeyDown,如果该键不是您想要的,只需将事件的Handled属性设置为true。任何一种方法都可以


    --Dan

    或者你可以使用一个专门用于这种用途的蒙面盒子


    这将不允许您拒绝字符。我如何使用它来防止用户输入与句号/点(.)相同的字符两次?WinForms?ASP.Net?Silverlight?WPF?MonoTouch?XNA?你还没有回答我的问题。你在用什么UI框架?还有,它叫C#。好主意,我总是忘了那个。请重新评论“你还没有回答我的问题。你在用什么UI框架?还有,它叫C#”