winform的一个问题,不知道c#能否实现。

jzyuchen 2004-12-16 10:26:19
form上有一个textbox控件textBox1和一个button控件button1

private void button1_Click(object sender, System.EventArgs e)
{
for(int i=0;i<400;i++)
{
textBox1.Text = i.ToString();
}
}

运行这段代码,textBox1的内容是直接显示了400,有没有办法让textBox1即时显示i的值?
就是有肉眼可以看到textBox1的内容是从0然后经过每一个数字再显示400呢?
...全文
327 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2004-12-18
  • 打赏
  • 举报
回复
测试过的,肯定是可以的。
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里的,执行的时候,就无法响应别的了。建议楼主改改想法,按钮只触发一下就行,累加给另一线程做。
lih163 2004-12-18
  • 打赏
  • 举报
回复
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
}
}
LPeody 2004-12-17
  • 打赏
  • 举报
回复
好象问题还没有解决啊!!

这么多高手都搞不定吗??

dajianshi(拔剑四顾心茫然)知道的话,可以帮忙写出来吗?
龍过鸡年 2004-12-17
  • 打赏
  • 举报
回复
你们试了再说话~~~
criedshy 2004-12-17
  • 打赏
  • 举报
回复
学习
龍过鸡年 2004-12-17
  • 打赏
  • 举报
回复
timer 控件,间隔 250 毫秒
textBox1.Text = (i++).ToString();
tengjian1981 2004-12-17
  • 打赏
  • 举报
回复
up
qiuzhongyu 2004-12-17
  • 打赏
  • 举报
回复
要抛出一个线程好了
这样主界面就不会死了
nenzz 2004-12-17
  • 打赏
  • 举报
回复
我感觉用Refresh()比较好一些.
我前几天在做一个程序时,都试了一下,感觉Refresh()较好.
北京的雾霾天 2004-12-17
  • 打赏
  • 举报
回复
如下:

private void button1_Click(object sender, System.EventArgs e)
{
for(int i=0;i<400;i++)
{
textBox1.Text = i.ToString();
Application.DoEvents();//这里加这一句就可以了.
//用Sleep()有点费时间,不太好.
//用Refresh();程序运行时有点假死机的现象.不太好.
}
}
sunyou 2004-12-17
  • 打赏
  • 举报
回复
不要直接在界面事件处理中进行耗时的操作,否则达不到预期的效果还容易让界面失去响应(这是Windows窗口机制决定的),注意使用事件驱动的机制。
北京的雾霾天 2004-12-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);
}
}
LPeody 2004-12-17
  • 打赏
  • 举报
回复
UP
LPeody 2004-12-17
  • 打赏
  • 举报
回复
好象用Application.DoEvents();太快了点。怎么调节变化的速度啊??
newsyue 2004-12-17
  • 打赏
  • 举报
回复
呵呵,大家回答问题是好的,可是。。。。。。

不看清别人的问题就。。。。。。。。。。。

汗。。。
lyvvvv 2004-12-17
  • 打赏
  • 举报
回复
textBox1.Refresh();
或者this.Refresh();都可以,不过这两条语句适用情况不一样。
如果textBox1.text改变过之后,再执行一段代码,然后再改变textBox2.text,那么就写:textBox1.Refresh;
如果执行代码之后改变所有textBox的text,然后再执行一段,再更改所有textBox,安么就写:this.Refresh
lucbesson 2004-12-17
  • 打赏
  • 举报
回复
晕了 楼主想要一个什么样的效果啊 ?

就是要textbox中显示的数字是不段的变化的对吗 ?!

如果是 whmjw(明年今日十年之后)写的就可以 !
用for不行 。。。。。
qiuzhongyu(省油的灯) 是不错,不过sleep让人感觉起来程序
跟死了一样。 最还还是timer !
newsyue 2004-12-17
  • 打赏
  • 举报
回复
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();
}
}
LPeody 2004-12-17
  • 打赏
  • 举报
回复
up

好象用Application.DoEvents();太快了点。怎么调节变化的速度啊??
佣工7001 2004-12-16
  • 打赏
  • 举报
回复
其实那种语言都不可能显示你的中间结果,否则还能要得?因为Paint事件的优先级很低的!
如果想显示,就必须强制控件显示.textBox1->Refresh();
或者用TImer的方式
加载更多回复(10)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧