2011-12-27 31 views
3

私は電卓をしようとしています。これはうまくいくはずですが、そうではありません。C#でkeydownが何らかの理由で動作しない

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.D1) 
     { 
      resultarea.Text = "fgdgd"; 
      //number(1); 

     } 
    .... 
    } 

何が間違っていた可能性がありますか?

編集:まだ動作していません。私はコード全体を投稿するかもしれないと思った。あなたはWinFormsのプロジェクトを持っていると仮定すると

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     KeyPreview = true; 

    } 
    double first = 0; 
    double second = 0; 
    string op = ""; 
    bool last = true; 

    public void calculate() 
    { 
     double aux = first; 
     first = second; 

     if (op == "+") 
      second = aux + second; 
     else if (op == "-") 
      second = aux - second; 
     else if (op == "*") 
      second = aux * second; 
     else if (op == "/") 
      if (second == 0) 
       { first = aux; viewarea.Text = "Cannot divide by zero"; } 
      else 
       second = aux/second; 
     //if (viewarea.Text == "Cannot divide by zero") 
      resultarea.Text = second.ToString(); 

    } 

    public void number(int digit) 
    { 
     if (last == true) 
     { 
      resultarea.Clear(); 
      last = false; 
      first = second; 
      second = 0; 
     } 
     resultarea.Text += digit.ToString(); 
     second = second * 10 + digit; 

    } 

    public void sign(string sign) 
    { 
     if (last==false && (first != 0 && second != 0)) 
      calculate(); 
     op = sign; 
     debug.Text = op; 
     last = true; 
    } 

    private void equal_Click(object sender, EventArgs e) 
    { 
     if (last == false && (first != 0 && second !=0)) 
      calculate(); 
     op = ""; 
     last = true; 
    } 

    private void one_Click(object sender, EventArgs e) 
    { 
     number(1); 
    } 

    private void two_Click(object sender, EventArgs e) 
    { 
     number(2); 
    } 

    private void plus_Click(object sender, EventArgs e) 
    { 
     sign("+"); 
    } 

    private void minus_Click(object sender, EventArgs e) 
    { 
     sign("-"); 
    } 



    private void three_Click(object sender, EventArgs e) 
    { 
     number(3); 
    } 

    private void creset_Click(object sender, EventArgs e) 
    { 
     first = 0; 
     second = 0; 
     op = ""; 
     last = true; 
     viewarea.Text = ""; 
     resultarea.Text = ""; 
     debug.Text = ""; 
    } 

    private void four_Click(object sender, EventArgs e) 
    { 
     number(4); 
    } 

    private void five_Click(object sender, EventArgs e) 
    { 
     number(5); 
    } 

    private void six_Click(object sender, EventArgs e) 
    { 
     number(6); 
    } 

    private void seven_Click(object sender, EventArgs e) 
    { 
     number(7); 
    } 

    private void eight_Click(object sender, EventArgs e) 
    { 
     number(8); 
    } 

    private void nine_Click(object sender, EventArgs e) 
    { 
     number(9); 
    } 

    private void zero_Click(object sender, EventArgs e) 
    { 
     number(0); 
    } 

    private void divide_Click(object sender, EventArgs e) 
    { 
     sign("/"); 
    } 

    private void times_Click(object sender, EventArgs e) 
    { 
     sign("*"); 
    } 

    private void sqr_Click(object sender, EventArgs e) 
    { 
     second = Math.Sqrt(second); 
     resultarea.Text = second.ToString(); 
    } 

    private void cos_Click(object sender, EventArgs e) 
    { 
     second = Math.Cos(second); 
     resultarea.Text = second.ToString(); 
    } 

    private void sin_Click(object sender, EventArgs e) 
    { 
     second = Math.Sin(second); 
     resultarea.Text = second.ToString(); 
    } 

    private void tan_Click(object sender, EventArgs e) 
    { 
     second = Math.Tan(second); 
     resultarea.Text = second.ToString(); 
    } 

    private void nfac_Click(object sender, EventArgs e) 
    { 
     double aux = second; 
     if (second == 0) 
      aux = 1; 
     else 
     for (double i = 1; i < second; i++) 
      aux= aux*i; 
     second = aux; 
     resultarea.Text = second.ToString(); 
    } 

    private void log_Click(object sender, EventArgs e) 
    { 
     second = Math.Log(second); 
     resultarea.Text = second.ToString(); 
    } 

    private void ln_Click(object sender, EventArgs e) 
    { 
     second = Math.Log10(second); 
     resultarea.Text = second.ToString(); 
    } 

    private void xexp_Click(object sender, EventArgs e) 
    { 
     second = Math.Pow(second ,2); 
     resultarea.Text = second.ToString(); 
    } 

    private void dot_Click(object sender, EventArgs e) 
    { 

    } 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.D1 || e.KeyCode == Keys.NumPad1) 
     { 
      viewarea.Text = "fgdgd"; 
      //number(1); 


     } 
     else if (e.KeyCode == Keys.D2 || e.KeyCode == Keys.NumPad2) 
     { 
      number(2); 
     } 
     else if (e.KeyCode == Keys.D3 || e.KeyCode == Keys.NumPad3) 
     { 
      number(3); 
     } 
     else if (e.KeyCode == Keys.D4 || e.KeyCode == Keys.NumPad4) 
     { 
      number(4); 
     } 
     else if (e.KeyCode == Keys.D5 || e.KeyCode == Keys.NumPad5) 
     { 
      number(5); 
     } 
     else if (e.KeyCode == Keys.D6 || e.KeyCode == Keys.NumPad6) 
     { 
      number(6); 
     } 
     else if (e.KeyCode == Keys.D7 || e.KeyCode == Keys.NumPad7) 
     { 
      number(7); 
     } 
     else if (e.KeyCode == Keys.D8 || e.KeyCode == Keys.NumPad8) 
     { 
      number(8); 
     } 
     else if (e.KeyCode == Keys.D9 || e.KeyCode == Keys.NumPad9) 
     { 
      number(9); 
     } 
     else if (e.KeyCode == Keys.Divide) 
     { 
      sign("/"); 
     } 
     else if (e.KeyCode == Keys.Subtract) 
     { 
      sign("-"); 
     } 
     else if (e.KeyCode == Keys.Add) 
     { 
      sign("+"); 
     } 
     else if (e.KeyCode == Keys.Enter) 
     { 
      sign("="); 
     } 
    } 
    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 


} 
+0

はそれが発射ではありません(あなたForm1_KeyDown方法にそれを追加しますか)? – Shai

+1

WinformsまたはWpfですか?フォームに他のコントロールがありますか?そのユーザーに焦点が当てられますか? – Fischermaen

+0

@Fischer KeyEventArgsで見られるように、Windowsフォームです。 – Adam

答えて

14

は、(たとえば、コンストラクタで)そのように、trueにフォームのKeyPreviewプロパティを設定します。

public Form1() 
{ 
    InitializeComponent(); 
    KeyPreview = true; 
} 

とあなたが予想されるようにそれが動作するはずです。

編集:私はすべての兆候をキャッチするコードを追加しましたによりあなたのコメントに

if (((e.KeyCode == Keys.D7) && (e.Modifiers == Keys.Shift)) || (e.KeyCode == Keys.Divide)) 
{ 
    sign("/"); 
} 
else if (((e.KeyCode == Keys.Oemplus) && (e.Modifiers == Keys.Shift)) || (e.KeyCode == Keys.Multiply)) 
{ 
    sign("*"); 
} 
else if ((e.KeyCode == Keys.OemMinus) || (e.KeyCode == Keys.Subtract)) 
{ 
    sign("-"); 
} 
else if ((e.KeyCode == Keys.Oemplus) || (e.KeyCode == Keys.Add)) 
{ 
    sign("+"); 
} 
else if (e.KeyCode == Keys.Enter) 
{ 
    sign("="); 
} 
+0

あなたの回答を見たことがあります。あなたが期待したように** +1 :-) –

+0

@PankajUpadhyay:ありがとう! :-D – Fischermaen

+0

まだ何も、私は私の最初の投稿に私の全体のコードを入れました –

関連する問題