更改按钮中的标签文本单击 - 了解循环

时间:2016-10-10 20:42:50

标签: c# for-loop string-concatenation

当我点击按钮从i = 0开始循环时,我想看到i的标签值。但是我只看到了i的最后一个值。

public partial class Form1 : Form
    {
        int i;
        public Form1()
        {
            InitializeComponent();
        }

        private void btnclick_Click(object sender, EventArgs e)
        {
            for (  i = 0; i < 3; i++)
            {                
                lblForLoopExample.Text = i.ToString();
                System.Threading.Thread.Sleep(1000);
            }
        }
    }

当我运行我的代码时,我只在标签上看到; 2

我希望在下面看到这样的内容;

当启动For循环时,i = 0,我必须在Label.Text上看到0。那么当i = 1时,我必须在label.Text上看到1。当i = 2时,我必须在Label.Text上看到2。

我添加了Thread.Sleep(1000)但结果并没有改变。

我犯错误的地方?

请帮帮我, 如果你帮助我,我将感激你。

谢谢,

4 个答案:

答案 0 :(得分:1)

您需要附加lbl以获取所有值。现在,它完成循环并为您提供标签中的最后一个值

public partial class Form1 : Form
{
    int i;
    public Form1()
    {
        InitializeComponent();
    }

    private void btnclick_Click(object sender, EventArgs e)
    {
        for (  i = 0; i < 3; i++)
        {

            lblForLoopExample.Text + = i.ToString();


        }
    }
}

答案 1 :(得分:0)

重新编写字符串的每个循环。而不是说

lblForLoopExample.Text = i.ToString();

您需要在每次迭代时添加到字符串。我创建了一个变量来保存值,所以像这样:

string myString = string.Empty;

for(i=0;i < 3; i++)
{
    myString += i.ToString() + ", ";
}

lblForLoopExample.Text = myString.substring(0, (myString.length - 1));

子字符串就是这样,你就不会有这个尾随的逗号。这是一种肮脏的代码,但它会起作用。

答案 2 :(得分:0)

首先,您的代码无法编译,因为您遗漏了ToString()i.ToString方法的确切格式以及;

lblForLoopExample.Text = i.ToString();
                                   ^^^

根据您的代码,您应该尝试这样做:

for (  i = 0; i < 3; i++)
{
    lblForLoopExample.Text += i.ToString() + ", ";
}

答案 3 :(得分:0)

您的问题是您在UI线程上工作,同时期望UI线程更新您的表单。

在处理循环时,UI线程实际上正在执行此代码。因此,UI线程无法使用您在循环中设置的中间值更新表单。代码完成后,UI线程可以自由更新表单。这就是为什么你只看到最后一个值的原因。

如果您将代码更新为循环千万次而不是3次,您可以更好地看到这一点。您的表单将变得无响应并显示为已锁定。这是因为Windows知道您的UI线程在密集的过程中被锁定,无法更新UI。

解决方案是使用后台线程来运行您的进程并使用UI线程同步更新。正如其他人所建议的那样,您还必须放慢循环以查看更改。

要详细了解UI线程的工作原理,以及如何与后台线程同步,read this article(它关于WPF,但它涵盖了一般情况)。