日期:2014-05-17  浏览次数:20888 次

winform中子窗体如何调用父窗体中的某个方法
父窗体 pForm:父窗体中有一个方法loadwebName(),该方法中引用窗体上的控件用于数据绑定,
子窗体 cForm:我想在子窗体的button事件下调用方法loadwebName().
我在网上查了些资料,文章都是大都是相互转载的,通用方法是设置公共属性(本例应该不能用),在父窗体初始化时候将父窗体传给子窗体(由于窗体间相互调用,不太灵活),然后就是用委托。
求指教,用委托如何实现,或者其它方法也行。
------最佳解决方案--------------------
事件委托。。

public partial class b : Form
{
public delegate void RefreshHandler(int num);
public event RefreshHandler RefreshList;
public b()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (RefreshList != null)
{
RefreshList(Convert.ToInt32( dataGridView1.CurrentRow.Cells[0].Value));
}
}
主窗口的
private void button5_Click(object sender, EventArgs e)
{
Form b = new b();
b.RefreshList += new b.RefreshHandler(a_handleRefresh);
b.ShowDialog();
void a_handleRefresh(int num)
{
//查询操作,那个num就是B窗体中数字。。。
}

------其他解决方案--------------------
最简单的方法就是打开子窗体 的时候,把父窗体对象也传过去,之后直接可以在子窗体操作父窗体的方法
------其他解决方案--------------------
窗体都是对象,想使用其他对象中的东西,只需要找到这个对象。
------其他解决方案--------------------
这个我试过,但是我子窗体在其他窗体中也有调用,这样有点乱,我添加了个带有一个参数的构造方法,但是总是提示未将对象引用传递都子窗体
------其他解决方案--------------------
还是有点问题:
在cForm中:  
 public delegate void useParentMethod();
 public event useParentMethod showParentMenuscript;
 button事件中:
      if (showParentMenuscript != null)
      {
            showParentMenuscript();
      }
在pForm中:
  form_load事件: 
              AddWeb add = new AddWeb();
            add.showParentMenuscript += new AddWeb.useParentMethod(LoadWebName);
为什么单击cForm中的button不行呢?

------其他解决方案--------------------
告人帮忙指点下
------其他解决方案--------------------
该怎么处理呢?