简体   繁体   中英

KeyPress event equivalent in WPF

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. its not working the same
  2. I cant find the equal sign within e.key

first code:

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

    }

second code:

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

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

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
    }
}

You're looking for the TextInput event, or perhaps PreviewTextInput .

The EventArgs type is TextCompositionEventArgs ; I believe you want the Text property here, but I'm not at all sure of that.

<TextBox x:Name="txtbx" KeyDown="OnKeyDownHandler" Height="23" Width="250">
</TextBox>
private void OnKeyDownHandler(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Return)
    {
        txtbx.Text = "You Entered: " + txtbx.Text;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM