Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

KeyPress event equivalent in WPF

Tags:

c#

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);         }     } 
like image 316
joseph Avatar asked Nov 27 '12 15:11

joseph


2 Answers

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     } } 
like image 123
Will Faithfull Avatar answered Sep 29 '22 12:09

Will Faithfull


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.

like image 25
phoog Avatar answered Sep 29 '22 13:09

phoog