C#GUI中的简单函数调用

时间:2013-07-28 16:28:13

标签: c# function

我是C#的新手。我在表单和按钮中有两个文本框。当我单击按钮时,我希望将值1放入textbox1,然后计算squareroot并将其放入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 个答案:

答案 0 :(得分:5)

两件事:

1)

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

这将永远不会做任何事情因为退出条件得到满足 - 你可能意味着initialVal <= 20

2)您需要使用后台线程 - 否则您的GUI将不会更新,直到您的button1 _ Click处理程序完全完成。例如。看看BackgroundWorker class

答案 1 :(得分:1)

由于不满足条件,因此永远不会执行for循环:

initialVal >= 20

将其更改为

initialVal <= 20

执行循环20次。

答案 2 :(得分:0)

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

而且,对于这一行,我认为你可以简单地做到

int sum = initialVal * initialVal ;

你不需要计算数字的方形,而且该函数无论如何也没有任何意义。

答案 3 :(得分:0)

在GUI中调用Sleep会使您的应用无响应,因此最好使用后台线程或计时器。计时器更容易。首先,在设计视图中,只需将Timer(它位于工具箱的“组件”部分中)拖放到表单上即可。将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;
    }

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

public partial class Form1 : Form {
    int initialVal;