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):
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With