日期:2014-05-20  浏览次数:21010 次

100分,WinForm中父窗体是用户控件,子窗体怎么刷新他
WinForm中,如果父窗体是一般的窗体好做.
但现在问题是当父窗体是一个用户控件时,怎么让子窗体刷新他


------解决方案--------------------
将父窗体(就是那个用户控件)声明为public static,子窗体就可以通过父窗体的变量来操作
------解决方案--------------------
委托
------解决方案--------------------
用模块
------解决方案--------------------
把你要用的父窗体的声明代码写在模块中,调用模块来启动父窗体
------解决方案--------------------
委托吧,但是也要先得到父窗体的实例才行
------解决方案--------------------
看你需要父窗体作什么操作了,在子窗体中用parent属性可以获取父窗体对象。如果只是简单的刷新操作,用这个就足够了,但是如果还牵扯到别的操作。那就看你测自窗体是Show呢还是ShowDialog,功能不同,需求也不同呀!
------解决方案--------------------
parent 只能调用父窗体的对象,但是不能引起父窗体的刷新
因为父窗体已经在内存中
所以需要借用模块
------解决方案--------------------
winform刷新?还真没试过.
------解决方案--------------------
是的 Module
你把父窗体声明写在Module里,
------解决方案--------------------
Invalidate();
------解决方案--------------------
委托回调...
------解决方案--------------------
try..

http://community.csdn.net/Expert/topic/5189/5189957.xml?temp=.6943018

------解决方案--------------------
this.Parent.Invalidate();

或者

this.TopLevelControl.Invalidate();
------解决方案--------------------

CON-如何在子窗体(被调用者)中实现对其父窗体(调用者)的刷新呢?
网络上有几种方法,先总结如下:
调用窗体(父):Form1,被调用窗体(子):Form2
方法1: 所有权法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//在调用Form2时,要把Form2的所有者设为Form1
Form2 f2 = new Form2() ;
f2.Owner = this;
f2.ShowDialog() ;
//Form2:
//在需要对其调用者(父)刷新时
Form1 f1 ;
f1 = (Form1)this.Owner;
f1.Refresh_Method() ;
方法2:自身传递法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
Form2 f2 = new Form2() ;
f2.ShowDialog(this) ;
//Form2:
private Form1 p_f1;
public Form2(Form1 f1)
{
InitializeComponent();
p_f1 = f1;
}
//刷新时
p_f1.Refresh_Method() ;
方法3:属性法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
Form2 f2 = new Form2() ;
f2.P_F1 = this;
f2.Show() ;

//Form2:
private Form1 p_f1;
public Form1 P_F1
{
get{return p_f1;}
set{p_f1 = value;}
}
//刷新时
p_f1.Refresh_Method() ;
方法4:委托法
//声明一个委托
public delegate void DisplayUpdate();
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
Form2 f2 = new Form2() ;
f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;
f2.Show() ;
//Form2:
//声明事件
public event DisplayUpdate ShowUpdate;
//刷新时,放在需要执行刷新的事件里
ShowUpdate();