在WPF中等效的KeyPress事件

我在WPA中有以下代码,我正在尝试将其转换为WPF。 我试过Keydown而不是Keypress并改变了,例如,

(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()) { 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枚举进行比较。

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

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

然后在事件处理程序中:

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

您正在寻找TextInput事件,或者可能是PreviewTextInput 。

EventArgs类型是TextCompositionEventArgs ; 我相信你想要Text属性,但我完全不确定。

   private void OnKeyDownHandler(object sender, KeyEventArgs e) { if (e.Key == Key.Return) { txtbx.Text = "You Entered: " + txtbx.Text; } }