2012-11-27 13 views
17

Ich habe den folgenden Code in WPA, und ich versuche, es in WPF zu konvertieren. Ich habe versucht, Keydown statt Keypress und verändern, zum BeispielKeyPress-Ereignis entspricht in WPF

(e.keyChar == '-') to (e.key == e.Subtract): 
  1. seines nicht funktioniert die gleiche
  2. Ich kann nicht das Gleichheitszeichen in e.key

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

    } 

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

Antwort

18

Es ist sehr ähnlich - aber Sie vergleichen e.Key mit der Key-Enumeration.

Registrieren Sie Ihre Event-Handler irgendwo (wie Konstruktor oder Window_Loaded):

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

Und dann im Ereignishandler:

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

vielen Dank .. ich werde es versuchen – joseph

+0

jetzt habe ich versucht, die Window_Loaded und es sais, dass seine bereits definiert ... – joseph

+1

ich meine gerade entdeckt, dass nichts funktioniert ,,,, i. Ich habe 2 texchanged Ereignisse und das KeyDown Ereignis, und nur das erste textchanged arbeitet, das andere wird überhaupt nicht ausgeführt. – joseph

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