我是C#的新手。使用下面的代码,每当我按下键盘上的数字键时,它将在文本框中显示两次。当我按下键盘上的“1”时,它将显示 “11”,当我按“2”时,它将显示“22”。这是为什么?
private void Window_TextInput(object sender, TextCompositionEventArgs e)
{
if(!isNumeric(e.Text))
{
string display = string.Empty;
display += e.Text;
displayNum(display);
}
else
{
String inputOperator = string.Empty;
inputOperator += e.Text;
if (inputOperator.Equals("+"))
{
ApplySign(sign.addition, "+");
}
}
}
private bool isNumeric(string str)
{
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("[^0-9]");
return reg.IsMatch(str);
}
private void window_keyUp(object sender, KeyEventArgs e)
{
if (e.Key >= Key.D0 && e.Key <= Key.D9)
{
int num = e.Key - Key.D0;
outputText2.Text += num;
}
}
private void BtnNum_Click(object sender, RoutedEventArgs e)
{
Button num = ((Button)sender);
displayNum(num.Content.ToString());
}
private void displayNum(String n)
{
if (operator1 == 0 && double.Parse(n) == 0)
{
}
else
{
if (operator1 == 0)
{
outputText2.Clear();
}
outputText2.Text += n;
operator1 = double.Parse(outputText2.Text);
outputText2.Text = Convert.ToString(operator1);
}
}
答案 0 :(得分:2)
您有两个事件正在处理键盘事件。虽然不太确定displayNum()
方法正在做什么
我假设Window_TextInput
事件是您希望主要处理事件的事件。
尝试添加
e.Handled = true;
在Window_TextInput
方法中。如果这不能解决问题,您可以发布displayNum()
方法吗?
编辑:
在进一步检查代码并尝试相同后,我没有看到window_keyUp
方法的相关性,因为Window_TextInput
处理输入字符并且具有更多适用于处理{{1}的逻辑变化。
删除TextInput
事件方法后,输出按预期显示(尽管已注释掉window_keyUp
方法。
答案 1 :(得分:2)
您订阅了两个与窗口级文本相关的事件 - TextInput
和KeyUp
- 并且这两个事件最终都会向TextBox附加输入。
window_keyUp
将数字附加到TextBox
看起来Window_TextInput
应该附加非数字字符,但您的RegEx不正确([^0-9]
匹配不数字的任何内容,因此{如果输入不是数字,则{1}}返回True。
效果是每次按下数字键都会显示两次。