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

Changing The Label Text in Button Click - Understanding For Loop

当我单击按钮时,从 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) 但是,结果没有改变。

我哪里搞错了?

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

谢谢,

您需要附加 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();


        }
    }
}

每次循环你重新写字符串。而不是说

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));

substring 只是为了让您没有尾随逗号。这是一种肮脏的代码,但它会起作用。

首先,您的代码无法编译,因为您缺少 i.ToStringToString() 方法的确切格式以及 ;

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

根据您的代码,您应该试试这个:

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

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

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

如果您将代码更新为循环 1000 万次而不是 3 次,您可以更好地看到这一点。您的表单将变得无响应并且看起来被锁定。那是因为 Windows 知道你的 UI 线程被锁定在一个密集的进程中并且无法更新 UI.

解决方案是使用后台线程 运行 您的进程并与 UI 线程同步更新。正如其他人所建议的那样,您还必须放慢循环速度才能看到变化。

要了解有关 UI 线程如何工作以及如何与其同步后台线程的更多信息,read this article(它是关于 WPF 的,但涵盖了一般情况)。