1

それで、ここに主なアイデアがあります。私は電卓を作ろうとしています。

private void _1_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "1";
        resultBox.Text = resultBoxText;
    }
    private void _2_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "2";
        resultBox.Text = resultBoxText;
    }
    private void _3_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "3";
        resultBox.Text = resultBoxText;
    }
    private void plus_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "+";
        resultBox.Text = resultBoxText;
    }

    private void minus_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "-";
        resultBox.Text = resultBoxText;
    }

上記のコードは、テキストボックス内のテキストが変更された数値またはオペランドを入力したときのユーザー向けです。さて、実際の計算はどのように行うのでしょうか? 別の関数(引数付き)で?すべてのオペランドに対して 1 つの変数で十分ですか、それとも配列を作成する必要がありますか? 入力が進むにつれて、それらを一緒に追加するにはどうすればよいですか? 例: 「2」、「+」、「3」の順に押した場合、それらを結果にまとめるにはどうすればよいですか? どうやって始めたらいいのかわからない :/

4

2 に答える 2

0

1,2,3,4 のみを加算/減算する場合は、1 つの変数で十分です。必要なすべての計算をイベント ハンドラーで正しく行うだけです。

于 2013-10-31T22:40:30.710 に答える
0

私は最近、これとまったく同じことを試みました。次の驚くほど簡単な解決策を思いつきました。まず、COM ライブラリへの参照を追加しますMSScriptControl( VS で参照を追加および削除する方法)。次に、すべての番号ボタンクリックイベントの後:

private void _1_button_Click(object sender, RoutedEventArgs e)
{
    resultBoxText += "1";
    resultBox.Text = resultBoxText;
}
private void _2_button_Click(object sender, RoutedEventArgs e)
{
    resultBoxText += "2";
    resultBox.Text = resultBoxText;
}
private void _3_button_Click(object sender, RoutedEventArgs e)
{
    resultBoxText += "3";
    resultBox.Text = resultBoxText;
}
private void plus_button_Click(object sender, RoutedEventArgs e)
{
    resultBoxText += "+";
    resultBox.Text = resultBoxText;
}

private void minus_button_Click(object sender, RoutedEventArgs e)
{
    resultBoxText += "-";
    resultBox.Text = resultBoxText;
}

等号ボタンのコードを入力します。

private void equals_button_Click(object sender, RoutedEventArgs e)
{
    MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl();
    sc.Language = "VBScript";
    //Using try catch statement just in case a user enters an invalid expression. 
    //This becomes more useful when the application gets more advanced. 
    try
    {
        object result = sc.Eval(resultBoxText);
        //Output the result somehow. E.g.: resultBox.Text = result.ToString();
    }
    catch
    {
        MessageBox.Show("Invalid expression!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

この少量のコードだけで、「7*9-6+3/6」などの文字列を取得でき、「57.5」という正しい答えが返されます。ただし、これが「1(1)」のような文字列を適切に処理できないことは、言及しなければなりません。技術的には「1*1」と表示する必要がありますが、エラーが発生するだけです。そのため、それを回避するために少しコーディングを行う必要がありました。でも、橋に来たら渡らせてあげるよ... :)

1 つ付け加えておきたいことがあります。すべての数字ボタンに「1」、「2」、または「+」の単純なテキストが含まれている場合、ボタンのクリック数を大幅に減らすことができます。

private void num_button_click(object sender, RoutedEventArgs e)
{
    Button b = (Button)sender;
    resultBoxText += b.Text;
    resultBox.Text = resultBoxText;
}

次に、すべての番号ボタンについて、クリックされるたびに num_button_click コードを参照します。これは、すべてのオペレーター ボタン (「+」) でも機能します。

一方、ボタンに「クリックしてください」などのテキストが含まれている場合は、元のコードをそのまま使用してください。私を無視。

そして、すべてのクリック イベントにRoutedEventArgs. WPFを使用していますか?私はそれがwinformであると仮定しました。とにかく、コードはまだ動作するはずです...それがあなたが探しているものであることを願っています.

于 2013-11-04T03:29:01.973 に答える