Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅将文本框输入限制为运算符符号_C#_Winforms_Textbox - Fatal编程技术网

C# 仅将文本框输入限制为运算符符号

C# 仅将文本框输入限制为运算符符号,c#,winforms,textbox,C#,Winforms,Textbox,我的WinForms应用程序中有一个文本框,我想使用一个方法检查用户是否通过+,-,*,/ 我使用的是文本框,因此用户可以输入类似于计算器的运算符。我知道默认情况下文本框只接受字符串以及如何转换它们,但我不确定如何检查以确保输入符合您想要的限制。 我只想确保他们输入以下符号之一:+,-,*,/ 除了表单中的文本框和方法之外,我没有任何代码,因为我不知道如何启动。 有没有人建议我可以在微软的网站上搜索什么来阅读更多关于这方面的信息,或者我可以在哪里观看关于文本框限制的视频?谢谢。您可以使用按键事件

我的WinForms应用程序中有一个文本框,我想使用一个方法检查用户是否通过
+,-,*,/

我使用的是文本框,因此用户可以输入类似于计算器的运算符。我知道默认情况下文本框只接受字符串以及如何转换它们,但我不确定如何检查以确保输入符合您想要的限制。
我只想确保他们输入以下符号之一:
+,-,*,/

除了表单中的文本框和方法之外,我没有任何代码,因为我不知道如何启动。

有没有人建议我可以在微软的网站上搜索什么来阅读更多关于这方面的信息,或者我可以在哪里观看关于文本框限制的视频?谢谢。

您可以使用按键事件,如下所示

首先订阅textbox的按键事件

 textBox1.KeyPress += TextBox1_KeyPress;
按键事件代码

 if(e.KeyChar == '+' || e.KeyChar == '-'|| e.KeyChar == '*' || e.KeyChar == '/' || e.KeyChar == '\b' ) // \b is to handle back space.
        {

        }
        else
        {
            e.Handled = true;
        }

每次文本更改时,仅对其进行处理以查找第一个允许的符号:

//attach this handler code to the TextChanged event
private void OperatorTextBox_TextChanged(object sender, EventArgs e){

  //if there is nothing in the box return so we don't crash
  if(OperatorTextBox.Text.Length < 1)
    return;

  //could define this elsewhere
  string permittedCharacters = "+-*/";

  //if the box already contains only one permitted char, return. this stops an endless loop
  if(OperatorTextBox.Text.Length == 1 && permittedCharacters.Contains(OperatorTextBox.Text))
    return;

  //find the first permitted char
  int index = OperatorTextBox.Text.IndexOfAny(permittedCharacters.ToCharArray());

  //and set the box contents to the permitted char. This will cause the textchanged event to raise again. Looping is prevented by the above two checks
  if(index > -1)
    OperatorTextBox.Text = OperatorTextBox.Text[index].ToString();
  else
    OperatorTextBox.Clear();

}
//将此处理程序代码附加到TextChanged事件
私有无效运算符TextBox_TextChanged(对象发送方,事件参数e){
//如果盒子里什么都没有,我们就不会崩溃
如果(OperatorTextBox.Text.Length<1)
回来
//可以在其他地方定义这一点
字符串许可字符=“+-*/”;
//如果该框已经只包含一个允许的字符,则返回。这将停止一个无休止的循环
if(operatertextbox.Text.Length==1&&permittedCharacters.Contains(operatertextbox.Text))
回来
//查找第一个允许的字符
int index=OperatorTextBox.Text.IndexOfAny(permittedCharacters.tocharray());
//并将框内容设置为允许的字符。这将导致textchanged事件再次引发。通过上述两项检查可以防止循环
如果(索引>-1)
OperatorTextBox.Text=OperatorTextBox.Text[index].ToString();
其他的
OperatorTextBox.Clear();
}
如果用户按下按键,Satish的回答会起作用,但如果用户粘贴按键,则不会起作用。使用textchanged,我们可以对更改框中文本的任何方法做出反应,甚至可以在框中粘贴大型文档。在“粘贴”的情况下,此方法将查找允许字符的第一个匹配项,并将框中的文本缩减为该字符,或者在输入错误时将其清除


要将此代码放入文本更改事件处理程序,请双击表单设计器上的文本框

我不明白订阅文本框的按键事件是什么意思,请解释一下,这是事件订阅,因此当用户在文本框中键入任何文本时,您需要获得通知,这可以通过按键事件实现。为了得到通知,你需要订阅它。一个常见的例子是按钮点击事件。所以,如果你想让用户点击你的按钮得到通知,你需要订阅它。如果你得到了,请告诉我,我同意你的意见,投票表决你的答案:)。