c# winform刷新(重新加载控件)。很奇怪的问题。

boci 2009-04-08 09:11:33
我的页面上很多,textbox及combobox等,比如我输入内容后提交,然后刷新窗口。
但我用this.refresh(); this.InitializeComponent(); this.form_Load(true,true); 等方法就是不行啊,文本框中的内容还是不变。
我在网上查了半天也没结果。
我的窗口中有很多panel,会不会有影响啊。
...全文
5959 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cstester 2009-04-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 songbb123 的回复:]
我觉得还是在外面写个配置文件,
重新刷新的时候加载不就可以了。
[/Quote]

你不感觉 读配置文件. 没有遍历省性能么.至少还需要引入一个类,多一个对象.
写代码不要从来都不考虑性能..性能是首位.
天府荣城 2009-04-09
  • 打赏
  • 举报
回复
我觉得还是在外面写个配置文件,
重新刷新的时候加载不就可以了。
josephSC 2009-04-09
  • 打赏
  • 举报
回复
没什么好主意,只想到每个控件clear或Dispose
cstester 2009-04-08
  • 打赏
  • 举报
回复
winform 直接刷新方法 就是 this.refresh();
这个实现不了的话 只能用上面我给的那段代码片段,
cstester 2009-04-08
  • 打赏
  • 举报
回复

private void FlushControls(Control con)
{
foreach(Control c in this.Controls)
{
String type = c.GetType;
switch(type)
{
case "Textbox":
c.Clear();
break;
case "combobox":
c.Items.Clear();
break;
case "panel":
this.FlushControls(c);
break;
}
}


}




循环,迭代.手写代码,参数类型不对的话改改就可以了..

cstester 2009-04-08
  • 打赏
  • 举报
回复
那就得用我说的那个 跟7楼差不多少的循环,
然后反射 判断..是Textbox类型,或者combobox就clear();
uncleson88 2009-04-08
  • 打赏
  • 举报
回复
这个方法不知可不可行:先利用循环将 Form 中所有Control Dispose掉,再调用InitializeComponent();


foreach(Control c in this.Controls)
{
c.Dispose(); //如果有Panel等窗口的话,恐怕还得将子控件一一 Dispose掉...
}

InitializeComponent();

boci 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cstester 的回复:]
写个初始化方法..
循环便利元素,可以用反射得到类型,然后判断类型.清空.但是相对要耗性能些.

最好的方法就是写个像下面的
private void Initial()
{
this.textbox1.Clear();
this.textbox1.Clear();
this.textbox1.Clear();
......
//注意如果combobox不是绑定后台数据库的话可以像上面那行代码写.绑定的话
this.combobox.Items.Clear()…
[/Quote]

这样是可以实现。但太麻烦了。我的控件很多,而且有很多启动时就赋值了,很难利用循环再次赋值,只能一个一个写。
难道winform没法直接刷新?
cstester 2009-04-08
  • 打赏
  • 举报
回复
再有一点.面板 如果没有背景图片,对窗体是豪无影响的...
除非你的面板上背景图片老大了.超过1M 甚至更大,加载的时候会卡.
但是跟数据控件不发生关系..美观问题..
cstester 2009-04-08
  • 打赏
  • 举报
回复
写个初始化方法..
循环便利元素,可以用反射得到类型,然后判断类型.清空.但是相对要耗性能些.

最好的方法就是写个像下面的
private void Initial()
{
this.textbox1.Clear();
this.textbox1.Clear();
this.textbox1.Clear();
......
//注意如果combobox不是绑定后台数据库的话可以像上面那行代码写.绑定的话
this.combobox.Items.Clear();
//如果绑了,就像下面这么写
this.combobox.SelectedIndex=0;
}

每提交一次 刷新一次. 不知道是否是楼主的要求.
boci 2009-04-08
  • 打赏
  • 举报
回复
我就是想提交后可以再继续填写第二个。
重新赋值是可以,但我的控件很多,又不是一个类型的,有些事先已赋值了,有时还有从别的窗口加载的,重新赋值很麻烦啊。
如果可以恢复到程序刚刚启动时,就可以了。
lybelmont 2009-04-08
  • 打赏
  • 举报
回复
还是不太清楚你的具体情况

你是在另一个线程里加载吗?
cja03 2009-04-08
  • 打赏
  • 举报
回复
重新赋值就行了。
只是。。。。你不是输入内容了吗?

110,538

社区成员

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

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

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