C# WinForm子窗口与父窗口互相操作求知道。
子窗口中单击一个按钮,改变了数据,现在要实现它的父窗口上的数据做相应的变化。。
应该是子窗口单击按钮的时候生成一个事件,父窗口注册这个事件,子窗口激活这个事件,但是不知道怎么实现。。
能不能给提示!网上找到说用观察着模式,但是不会用啊
------解决方案--------------------1.子窗体添加自定义事件,事件参数可以使你需要专递到父窗体的信息
2.例如子窗体按钮点击事件中发生该事件
3.父窗体New子窗体时,声明子窗体自定义事件,然后父窗体添加事件响应函数,该函数中获取子窗体传过来的信息
------解决方案--------------------
对于需要在子窗体中调用父窗体方法的解决方案有两种。简单的一种就是在初始化子窗体的时候传入参数,参数类型为form类型。然后初始化一个父窗体实例并将传入参数赋给该实例。如下代码: //设置为全局变量
parentform parentform=new parentform();
public Frm1(parentform parent)
{
InitializeComponent();
parentform=parent;
}
另一种方法就是使用委托来实现。首先在子窗体中定义一个委托,然后在父窗体初始化子窗体时将子窗体希望调用的父窗体方法绑定在子窗体上。就可以了。代码如下: //父窗体form1 子窗体form2
//父窗体方法 send();
//子窗体方法定义委托
public delegate void rshowgysmb();//定义委托
public rshowgysmb showgys;//定义委托实现类
//调用父窗体中的方法
private void useparent()
{
if(showgys!=null)
{
showgys();
}
}
//父窗体中的方法:显示子窗体
private void showchildform()
{
form2 f=new form2();
f.showgys+=new form2.rshowgysmb(send);
f.showdialog();
}
这是我整理的。你看看是不是你要的
------解决方案--------------------虽然说的只是子窗体调用父窗体事件。但是反过来道理也是一样的。好好理解
------解决方案--------------------
------解决方案--------------------主窗体定义
private static MainForm mainForm;
public static MDIForm
{
get
{
return mainForm;
}
}
public MainFrom()
{
InitializeComponent();
mainForm= this;
}
子窗体调用
MainForm.MDIForm.方法
------解决方案--------------------我觉得你可以把你父窗体上面的显示数据的控件设为公有的,在子窗体中可以生成父窗体的对象,来访问父窗体上的控件,对父窗体上的控件进行操作。
1.父窗体的Designer.cs文件中(以Lable为例)
public System.Windows.Forms.Label label1;
2。在子窗体中生成对象
父窗体名称 f=new 父窗体名称();
f.Lable1.Text="你好";