C# 分配+&引用;C中添加按钮的键#

C# 分配+&引用;C中添加按钮的键#,c#,visual-studio-2010,events,event-handling,C#,Visual Studio 2010,Events,Event Handling,我正在使用微软VisualStudio2010中的WPF应用程序制作一个计算器。我制作了标准计算器中的不同按钮,并在它们上添加了按钮单击方法。现在,我还想执行与按钮单击方法相同的任务,方法是通过敲击特定的键来执行 比如说 我有“addButton\u Click”方法,它执行以下操作: private void addButton_Click(object sender, RoutedEventArgs e) { _op = 1; temp

我正在使用微软VisualStudio2010中的WPF应用程序制作一个计算器。我制作了标准计算器中的不同按钮,并在它们上添加了按钮单击方法。现在,我还想执行与按钮单击方法相同的任务,方法是通过敲击特定的键来执行

比如说

我有“addButton\u Click”方法,它执行以下操作:

    private void addButton_Click(object sender, RoutedEventArgs e)
    {
        _op = 1;    
        temp = displayPannel.Text;
        check = true;
    }
现在,如果我希望“+”键在计算器中执行相同的操作,而不是使用鼠标单击“+”按钮,该怎么办。我还想使用数字键以及鼠标点击。我怎么做?

MainWindow.xaml.cs

  private void TextBox_PreviewKeyUp_1(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.OemPlus || e.Key == Key.Add)
            MessageBox.Show("Tada");
    }
MainWindow.xaml

    <TextBox Text="Hello" PreviewKeyUp="TextBox_PreviewKeyUp_1"/>

MainWindow.xaml.cs

  private void TextBox_PreviewKeyUp_1(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.OemPlus || e.Key == Key.Add)
            MessageBox.Show("Tada");
    }
MainWindow.xaml

    <TextBox Text="Hello" PreviewKeyUp="TextBox_PreviewKeyUp_1"/>

您应该提取执行添加操作的方法。这不是强制性的,但是从handers调用方法是一种很好的做法,而不是在处理程序中包含一些大型代码,例如:

    private void addButton_Click(object sender, RoutedEventArgs e)
    {
        PerformAdd();
    }

    private void PerformAdd()
    {
        _op = 1;
        temp = displayPannel.Text;
        check = true;
    }
以及您的实际问题(我假设您希望创建类似Windows Calculator的内容):

  • 在MainWindow.xaml中附加PreviewKeyDown的处理程序。最好使用PreviewKeyDown,而不是在您的情况下使用KeyDown,因为预览事件从“外部到内部”,这意味着事件将首先显示在MainWindow处理程序中,然后显示在MainWindow内部控件的处理程序中,而普通事件则首先显示在内部类中。首先捕获MainWindow中的事件将允许您全局处理像“+”或“-”这样的按键,而无需将它们传递给内部控件

  • 在处理程序中,您应该检查KeyCode,并调用适当的方法,如下所示:

     private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
             {
                 if (e.Key == Key.OemPlus || e.Key == Key.Add)
                 {
                     PerformAdd();
                     e.Handled = true;
                 }
             }
    
  • 如你所见,e.Handled=true;线若将事件标记为已处理,则不会将其传递给内部控件。您应该将其标记为“操作”按键,这些按键不应该作为输入传递到文本框

    编辑:对于数字,您可以执行以下操作:

     if (e.Key == Key.D0 || e.Key == Key.NumPad0)
          textBox.Text = textBox.Text + "0";
    

    您应该提取执行添加操作的方法。这不是强制性的,但是从handers调用方法是一种很好的做法,而不是在处理程序中包含一些大型代码,例如:

        private void addButton_Click(object sender, RoutedEventArgs e)
        {
            PerformAdd();
        }
    
        private void PerformAdd()
        {
            _op = 1;
            temp = displayPannel.Text;
            check = true;
        }
    
    以及您的实际问题(我假设您希望创建类似Windows Calculator的内容):

  • 在MainWindow.xaml中附加PreviewKeyDown的处理程序。最好使用PreviewKeyDown,而不是在您的情况下使用KeyDown,因为预览事件从“外部到内部”,这意味着事件将首先显示在MainWindow处理程序中,然后显示在MainWindow内部控件的处理程序中,而普通事件则首先显示在内部类中。首先捕获MainWindow中的事件将允许您全局处理像“+”或“-”这样的按键,而无需将它们传递给内部控件

  • 在处理程序中,您应该检查KeyCode,并调用适当的方法,如下所示:

     private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
             {
                 if (e.Key == Key.OemPlus || e.Key == Key.Add)
                 {
                     PerformAdd();
                     e.Handled = true;
                 }
             }
    
  • 如你所见,e.Handled=true;线若将事件标记为已处理,则不会将其传递给内部控件。您应该将其标记为“操作”按键,这些按键不应该作为输入传递到文本框

    编辑:对于数字,您可以执行以下操作:

     if (e.Key == Key.D0 || e.Key == Key.NumPad0)
          textBox.Text = textBox.Text + "0";
    

    在窗口上钩住按键事件它显示的唯一可用方法是KeyDown和KeyUp,我应该在KeyPress事件中写入什么?在窗口上钩住按键事件它显示的唯一可用方法是KeyDown和KeyUp,我应该在KeyPress事件中写入什么?非常感谢成功了。如何将事件添加到数字键?非常感谢!^成功了。如何将事件添加到数字键?哈哈,我先回答了,这更简单,我没有得到答案?它还涵盖了OEM提供的数字事件和您的add key。是的,我尝试选择这两个答案作为正确答案,它选择了他的答案:p:D我会选择你的,如果这让你高兴的话^ ^请记住,这个解决方案只有在你关注文本框时才有效。若用户单击某个按钮,并尝试键入新号码,那个么在他单击文本框之前,该号码将无法工作。(这就是我提到Windows Calculator的原因,它总是允许您在单击按钮后键入数字)。如果这就是你所需要的一切,那很好,简单的解决方案是最好的。哈哈,我先回答了,它更简单,我没有得到答案?它还涵盖了OEM提供的数字事件和您的add key。是的,我尝试选择这两个答案作为正确答案,它选择了他的答案:p:D我会选择你的,如果这让你高兴的话^ ^请记住,这个解决方案只有在你关注文本框时才有效。若用户单击某个按钮,并尝试键入新号码,那个么在他单击文本框之前,该号码将无法工作。(这就是我提到Windows Calculator的原因,它总是允许您在单击按钮后键入数字)。如果这就是你所需要的一切,那么简单的解决方案就是最好的。