我是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;
}
}
}
有关它有什么问题的任何建议吗?
答案 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;