为什么数字击键出现两次?

时间:2014-01-07 02:09:33

标签: c# wpf

我是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);         
        }

    }

2 个答案:

答案 0 :(得分:2)

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

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

尝试添加

e.Handled = true;

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

编辑:

在进一步检查代码并尝试相同后,我没有看到window_keyUp方法的相关性,因为Window_TextInput处理输入字符并且具有更多适用于处理{{1}的逻辑变化。

删除TextInput事件方法后,输出按预期显示(尽管已注释掉window_keyUp方法。

答案 1 :(得分:2)

您订阅了两个与窗口级文本相关的事件 - TextInputKeyUp - 并且这两个事件最终都会向TextBox附加输入。

  • window_keyUp将数字附加到TextBox

  • 看起来Window_TextInput应该附加非数字字符,但您的RegEx不正确([^0-9]匹配数字的任何内容,因此{如果输入不是数字,则{1}}返回True。

效果是每次按下数字键都会显示两次。

相关问题