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

子窗体调用父窗体方法
你父窗体
 public partial class MainForm1 : Form
  {
  public MainForm1()
  {
  InitializeComponent();
  }
  private void CreateFormInstance(string formName)
  {
  try
  {
  bool flag = false;
  //遍历主窗口上的所有子菜单
  for (int i = 0; i < this.MdiChildren.Length; i++)
  {
  // 如果所点的窗口被打开则重新激活
  if (this.MdiChildren[i].Tag.ToString().ToLower() == formName.ToLower())
  {
  this.MdiChildren[i].Activate();
  this.MdiChildren[i].Show();
  this.MdiChildren[i].WindowState = FormWindowState.Normal;
  flag = true;
  break;
  }
  }
  if (!flag)
  {
  //如果不存在则用反射创建form窗体实例。
  Assembly asm = Assembly.Load("GZCRB");//程序集名
  object frmObj = asm.CreateInstance(formName);//程序集+form的类名。
  DockContent frms = (Form)frmObj as DockContent;
  //tag属性要重新写一次,否则在第二次的时候取不到。原因还不清楚。有知道的望告知。  
  frms.Tag = formName.ToString();
  frms.MdiParent = this;
  frms.Show(dockPanel1);
  }
  }
  catch (Exception ex)
  {
  MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
  }
  }  
}
MainForm1 的this.IsMdiContainer = true;

子窗体from2怎么调用 MainForm1中 CreateFormInstance()方法

------解决方案--------------------
CreateFormInstance为私有的实例方法,只可以在MainForm内部调用
------解决方案--------------------
试试窗体间的事件传递
OptionForm form = new OptionForm(); 
//注册事件 
form.OptionSettingChanged += new EventHandler(form_OptionSettingChanged); 
form.ShowDialog(); 

可以在百度搜搜。。。。。

------解决方案--------------------
直接在窗体1调用窗体2的事件方法是可以实现的。如下,点击窗体1的按钮会调用窗体2的button1_Click方法,而这个方法把Form3显示出来。 
Form1的按钮事件 
private void button1_Click(object sender, System.EventArgs e) 

Form2 form2 = new Form2(); 
form2.button1_Click(this, EventArgs.Empty); 

  
Form2的按钮事件 
public void button1_Click(object sender, System.EventArgs e) 

form3 = new Form3(); 
form3.Show(); 


将你上面的方法可以定义为类似的某个按钮或控件的事件即可。