WPF中的KeyPress事件等效项 [英] KeyPress event equivalent in WPF

查看:93
本文介绍了WPF中的KeyPress事件等效项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在WPA中具有以下代码,并且我正在尝试将其转换为WPF.我尝试使用Keydown而不是Keypress并进行了更改,例如

i have the following code in WPA, and i am trying to convert it to WPF. I tried Keydown instead of Keypress and changed, for example,

(e.keyChar == '-') to (e.key == e.Subtract):

  1. 其工作方式不同
  2. 我在e.key中找不到等号

第一个代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        foreach (TextBox tb in this.Controls.OfType<TextBox>())
        {
            tb.Enter += textBox_Enter;
        }
    }

    void textBox_Enter(object sender, EventArgs e)
    {
        focusedTextbox = (TextBox)sender;
    }

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {

        if (e.KeyChar == '+')
        {
            operand1.Real = getOperand.Real;
            operand1.Imag = getOperand.Imag;
            flag1 = 1;
            e.Handled = true;
        }
        else if (e.KeyChar == '-')
        {

            if (focusedTextbox != null)
            {
                if (focusedTextbox.Text == "")
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                    operand1.Real = getOperand.Real;
                    operand1.Imag = getOperand.Imag;
                    flag1 = 2;
                }
            }

        }
        else if (e.KeyChar == '*')
        {
            operand1.Real = getOperand.Real;
            operand1.Imag = getOperand.Imag;
            flag1 = 3;
            e.Handled = true;
        }
        else if (e.KeyChar == '/')
        {
            operand1.Real = getOperand.Real;
            operand1.Imag = getOperand.Imag;
            flag1 = 4;
            e.Handled = true;
        }
        else if (e.KeyChar == '=')
        {
            e.Handled = true;
            operand2.Real = getOperand.Real;
            operand2.Imag = getOperand.Imag;

            switch (flag1)
            {
                case 1:
                    operand1 = operand1 + operand2;
                    break;
                case 2: operand1 = operand1 - operand2;
                    break;
                case 3:
                    operand1 = operand1 * operand2;
                    break;
                case 4:
                    if (operand2.Magnitude == 0)
                    {
                        textBox1.Clear();
                        textBox2.Clear();
                        MessageBox.Show("Cannot divide by a number whose magnitude is zero");
                        operand1 = new Complex();
                        operand2 = new Complex();
                        listBox1.ClearSelected();

                    }
                    else
                    operand1 = operand1 / operand2;
                    break;
            }
            string s = operand1.ToString();
            if (flag == 1)
            {
                string[] s1 = s.Split(' ');

                if (s1[1] == "-")
                {
                    textBox1.Text = s1[0];
                    textBox2.Text = "-" + s1[3];
                }
                else
                {
                    textBox1.Text = s1[0];
                    textBox2.Text = s1[3];
                }
            }
            else if (flag == 2)
            {
                string[] s1 = s.Split('@');
                textBox1.Text = s1[0].Trim();
                textBox2.Text = s1[1].Trim();
            }

            listBox1.Items.Add(operand1);
        }

    }

第二个代码:

private void win_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Add)
        {
            operand1.Real = getOperand.Real;
            operand1.Imag = getOperand.Imag;
            flag1 = 1;
            e.Handled = true;

        }
        else if (e.Key == Key.Subtract)
        {

            if (textBox2.Text == "")
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                operand1.Real = getOperand.Real;
                operand1.Imag = getOperand.Imag;
                flag1 = 2;
            }

        }
        else if (e.Key == Key.Multiply)
        {
            operand1.Real = getOperand.Real;
            operand1.Imag = getOperand.Imag;
            flag1 = 3;
            e.Handled = true;
        }
        else if (e.Key == Key.Divide)
        {
            operand1.Real = getOperand.Real;
            operand1.Imag = getOperand.Imag;
            flag1 = 4;
            e.Handled = true;
        }
        else if (e.Key == Key.Enter)
        {
            e.Handled = true;
            operand2.Real = getOperand.Real;
            operand2.Imag = getOperand.Imag;

            switch (flag1)
            {
                case 1:
                    operand1 = operand1 + operand2;
                    break;
                case 2: operand1 = operand1 - operand2;
                    break;
                case 3:
                    operand1 = operand1 * operand2;
                    break;
                case 4:
                    if (operand2.Magnitude == 0)
                    {
                        textBox1.Clear();
                        textBox2.Clear();
                        MessageBox.Show("Cannot divide by a number whose magnitude is zero");
                        operand1 = new Complex();
                        operand2 = new Complex();
                        listBox1.UnselectAll();
                    }
                    else
                        operand1 = operand1 / operand2;
                    break;
            }
            string s = operand1.ToString();
            if (flag == 1)
            {
                string[] s1 = s.Split(' ');

                if (s1[1] == "-")
                {
                    textBox1.Text = s1[0];
                    textBox2.Text = "-" + s1[3];
                }
                else
                {
                    textBox1.Text = s1[0];
                    textBox2.Text = s1[3];
                }
            }
            else if (flag == 2)
            {
                string[] s1 = s.Split('@');
                textBox1.Text = s1[0].Trim();
                textBox2.Text = s1[1].Trim();
            }


            listBox1.Items.Add(operand1);
        }
    }

推荐答案

这非常相似-但是您将e.Key与Key枚举进行了比较.

It's very similar - but you compare e.Key to the Key enumeration.

在某个地方(例如构造函数或window_loaded)注册事件处理程序:

Register your event handler somewhere (such as the constructor, or window_loaded):

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    this.KeyDown += new KeyEventHandler(MainWindow_KeyDown);
}

然后在事件处理程序中:

And then in the event handler:

void MainWindow_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Subtract)
    {
        // Do something
    }
}

这篇关于WPF中的KeyPress事件等效项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆