子窗体调用父窗体方法
你父窗体
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();
}
将你上面的方法可以定义为类似的某个按钮或控件的事件即可。