2

我是 C# 的新手。我在一个表单和一个按钮中有两个文本框。当我单击按钮时,我希望将值 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

5

两件事情:

1)

for (int initialVal = 1; initialVal >= 20; initialVal++)

这将永远不会做任何事情,因为满足退出条件 - 你可能是说initialVal <= 20

_2)您需要使用后台线程 - 否则您的 GUI 在您的 button1 Click 处理程序完全完成之前不会更新。例如,看看BackgroundWorker 类

于 2013-07-28T16:30:47.647 回答
1

您的 for 循环将永远不会执行,因为它的条件不满足:

initialVal >= 20

将其更改为

initialVal <= 20

执行循环 20 次。

于 2013-07-28T16:31:36.993 回答
0

在 GUI 中调用Sleep会使您的应用程序无响应,因此最好使用后台线程或计时器。计时器更容易。首先,在设计视图中,只需将计时器(它位于工具箱的组件部分中)拖放到表单上。将Interval属性设置为 500。然后双击它,并将更新代码放在那里。请注意,您不需要循环;您只需要一些代码来告诉它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;
    }

最后 makeinitialVal作为成员变量,因为两个函数都需要访问它:

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

按照其他人的建议更改循环。

而且,对于这条线,我认为你可以简单地做

int sum = initialVal * initialVal ;

您不需要计算来对数字进行平方,并且该函数无论如何都没有做任何有意义的事情。

于 2013-07-28T16:37:30.487 回答