2014-01-07 145 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