2014-01-07 107 views
0

我是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

也许你只是注册了两次活动?检查设计器生成的代码以引用'window_keyUp()' – millimoose

+0

这是一个WPF程序吗? –

+0

'displayNum()'的内容是什么?此外,附加到'BtnNum_Click'和'Window_TextInput',它们调用'displayNum()'是什么? –

回答

2

您有两个事件正在处理键盘事件。虽然不太确定displayNum()方法在做什么

我假设Window_TextInput事件是您希望主要处理事件的事件。

尝试增加

e.Handled = true;

Window_TextInput方法。如果这不能解决问题,你可以发布displayNum()方法吗?

编辑:

后的代码的进一步审查,并试图同我没有看到相关的window_keyUp方法你Window_TextInput处理输入的字符,并具有用于处理TextInput变化更适用的逻辑。

之后我删除了window_keyUp事件方法的输出呈现在预期(尽管注释掉ApplySign()方法

+0

对不起..我忘了发布displayNum()函数..im真的很抱歉..现在编辑.. :) – Zurreal

+0

编辑后的编辑答案。 – Nico

+0

谢谢..因为我现在从你的答案理解问题的原因..我jst注释掉windw_KeyUp中的“outputText2.Text + = num”,它现在不会显示两次..感谢很多.. :) – Zurreal

2

您已订阅了两个窗口级别文本相关的事件 - TextInputKeyUp - 二者均最终附加输入到文本框。

  • window_keyUp附加号码到TextBox

  • 它看起来像Window_TextInput应该添加非数字字符,但你的正则表达式是不正确的([^0-9]匹配任何东西是数字,所以IsNumeric返回true如果输入的不是数字)

的影响每个数字按键都会显示两次。

+0

i认为我得到了常见的错误..从textinput和键盘上都显示。谢谢我现在能够解决问题.. :) – Zurreal

+0

没问题。我可能是错的,但仔细检查RegEx语句。 –

+0

yeh ..函数名称不正确..它假设为isNotNumeric..xD – Zurreal