private void button1_Click(object sender, System.EventArgs e)
{
for(int i=0;i<400;i++)
{
    textBox1.Text = i.ToString();
                                System.Threading.Thread.Sleep(?);//延时一定时间 ?的单位ms
}
}

解决方案 »

  1.   

    设置一个定时器,每隔一秒钟触发一个事件,在那个事件里写首先定义一个全局的变量
    static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
             int i=0;
    再到Form_load事件里面写
    myTimer.Interval = 1000;
    myTimer.Start();
    myTimer.Tick += new EventHandler(TimerEventProcessor);
    最后加上这个事件
    private  void TimerEventProcessor(Object myObject,EventArgs myEventArgs) 
    {
                               if(i<400)
                                {
                                 textBox1.Text = i.ToString();
                                          i++;
                                }
                                else
                                   i=0;
    }
      

  2.   

    我的意思是说像VB VC都是当控件的改变的时候 即可就可以看到控件的新值,
    比如
    点一个button改变textbox的值,然后再执行一段可能比较耗费时间的代码,在VB和VC中都立即可以看到textbox的值改变了,但是c#就必须等所有的程序运行完了以后才能看到textbox的值。有没有好一点的办法解决这个问题?如果要做一个安装文件的进度条,总不能进度条变长一点就要在延时几秒在运行后面的安装过程吧。
      

  3.   


    for语句怎么执行的好好的看看啊,是在内部循环,电脑执行的那么块。楼主现在没搞明白代码的执行。int i=0
    while(i<=400)
    {  
       textBox1.Text = i.ToString();
       i++
    }
      

  4.   

    to:lucbesson(女娃哈哈)我不只是说循环我的意思说c#的程序在运行的时候不能改变控件的状态,必须等待程序运行完以后才行。
    打个比方,
    如果form上有10000个textbox控件,代码中有给这10000个控件赋值的代码,如
    textbox1.text = "haha";
    textbox2.text = "hehe";
    textbox3.text = "xixi";
    ...
    ...
    ...
    textbox10000.text = "lala";程序的运行结果是你只能直接看到10000个控件同时改变了值,而不是程序赋值以后立即改变。
    这个在vb vc里都是立即改变的。不知道我这样说能不能明白。
      

  5.   

    在循环里加一句话: Application.Doevents();
      

  6.   

    qiuzhongyu(省油的灯) 的方法很好
      

  7.   

    我也COPY一下。Application.DoEvents();
      

  8.   

    其实那种语言都不可能显示你的中间结果,否则还能要得?因为Paint事件的优先级很低的!
    如果想显示,就必须强制控件显示.textBox1->Refresh();
    或者用TImer的方式
      

  9.   

    好象问题还没有解决啊!!这么多高手都搞不定吗??dajianshi(拔剑四顾心茫然)知道的话,可以帮忙写出来吗?
      

  10.   

    textBox1.Refresh();
    强制控件刷新
    我在做大批量数据导入时,就是这么解决显示当前正在导入的数据的ID等信息的!
    实时显示!private void button1_Click(object sender, System.EventArgs e)
    {
    for(int i=0;i<400;i++)
    {
        textBox1.Text = i.ToString();
                                    textBox1.Refresh();
    }
    }
      

  11.   

    晕了  楼主想要一个什么样的效果啊 ?就是要textbox中显示的数字是不段的变化的对吗 ?!如果是  whmjw(明年今日十年之后)写的就可以 !
    用for不行 。。
    qiuzhongyu(省油的灯) 是不错,不过sleep让人感觉起来程序
    跟死了一样。 最还还是timer !
      

  12.   

    如下:private void button1_Click(object sender, System.EventArgs e)
    {
    for(int i=0;i<400;i++)
    {
    textBox1.Text = i.ToString();
    Application.DoEvents();//这里加这一句就可以了.
    //用Sleep()有点费时间,不太好.
    //用Refresh();程序运行时有点假死机的现象.不太好.
    }
    }
      

  13.   

    我感觉用Refresh()比较好一些.
    我前几天在做一个程序时,都试了一下,感觉Refresh()较好.
      

  14.   

    up好象用Application.DoEvents();太快了点。怎么调节变化的速度啊??
      

  15.   

    textBox1.Refresh();
    或者this.Refresh();都可以,不过这两条语句适用情况不一样。
    如果textBox1.text改变过之后,再执行一段代码,然后再改变textBox2.text,那么就写:textBox1.Refresh;
    如果执行代码之后改变所有textBox的text,然后再执行一段,再更改所有textBox,安么就写:this.Refresh
      

  16.   

    好象用Application.DoEvents();太快了点。怎么调节变化的速度啊??
      

  17.   

    本来就很快,当然显示就快了,如果你要想让它慢慢的来显示,可以用Sleep(number)来指定一段时间间隔,比如System.Threading.Thread.Sleep(100);这样就可以不那么快了.例如:
    private void button1_Click(object sender, System.EventArgs e)
    {
    for(int i=0;i<400;i++)
    {
    textBox1.Text = i.ToString();
    Application.DoEvents();//这里加这一句就可以了.
    System.Threading.Thread.Sleep(100);
    }
    }
      

  18.   

    不要直接在界面事件处理中进行耗时的操作,否则达不到预期的效果还容易让界面失去响应(这是Windows窗口机制决定的),注意使用事件驱动的机制。
      

  19.   

    timer 控件,间隔 250 毫秒
    textBox1.Text = (i++).ToString();
      

  20.   

    private void button1_Click(object sender, System.EventArgs e)
    {
    for(int i=0;i<400;i++)
    {
        textBox1.Text = textBox1.Text + i.ToString();
                                    System.Threading.Thread.Sleep(?);//延时一定时间 ?的单位ms
    }
    }
      

  21.   

    测试过的,肯定是可以的。
    private void button2_Click(object sender, System.EventArgs e)
    {
    for(int i =0;i<600;i++)
    {
    label1.Text = i.ToString();
    System.Threading.Thread.Sleep(10);
    label1.Refresh();
    }
    }当然,有一点,因为处理的过程是写在button.click里的,执行的时候,就无法响应别的了。建议楼主改改想法,按钮只触发一下就行,累加给另一线程做。