2

私はC#が初めてです。フォームとボタンに 2 つのテキスト ボックスがあります。ボタンをクリックすると、値 1 が textbox1 に入れられ、平方根が計算されて textbox2 に入れられます。次に、コードを 1 から 20 までの数値ごとにループさせ、それぞれの値をテキスト ボックスに配置します。関数呼び出しに慣れるために、このコードを書いているだけです。私のコードは以下の通りですが、何もしていないようです:-

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for (int initialVal = 1; initialVal >= 20; initialVal++)
            {
                textBox1.Text = initialVal.ToString();
                int sum = calculation(initialVal);
                textBox2.Text = sum.ToString();
                System.Threading.Thread.Sleep(500);
            }
        }

        static int calculation(int x)
        {
            int sum;
            while (x <= 20)
            {
                sum = x * x;
                x++;
                return sum;
            }
            return 0;
        }
    }
}

何が問題なのかについて何か提案はありますか?

4

4 に答える 4

0

GUI で呼び出すSleepとアプリが応答しなくなる可能性があるため、バックグラウンド スレッドまたはタイマーを使用することをお勧めします。タイマーの方が簡単です。まず、デザイン ビューで、タイマー (ツールボックスの [コンポーネント] セクションにあります) をフォームにドラッグ アンド ドロップします。プロパティを 500 に設定しIntervalます。次に、それをダブルクリックして、そこに更新コードを入力します。ループは必要ないことに注意してください。initialValティックごとにインクリメントし、20 で停止するように指示するコードが必要です。

    private void timer1_Tick(object sender, EventArgs e) {
        textBox1.Text = initialVal.ToString();
        int sum = calculation(initialVal);
        textBox2.Text = sum.ToString();
        if (initialVal++ == 20)
            timer1.Enabled = false; 
    }

ここで、button_click コードを単純にタイマーを開始するように変更します。

    private void button1_Click(object sender, EventArgs e) {
        initialVal = 1;
        timer1.Enabled = true;
    }

initialVal両方の関数がそれにアクセスする必要があるため、最後にメンバー変数として作成します。

public partial class Form1 : Form {
    int initialVal;
于 2013-07-28T17:17:18.867 に答える
0

他の人が提案したようにループを変更します。

そして、この行については、簡単にできると思います

int sum = initialVal * initialVal ;

数値を二乗する計算は必要ありません。また、その関数は意味のあることは何もしません。

于 2013-07-28T16:37:30.487 に答える