有A,B,C,三个窗体,A上有个Button,B上有个panel,怎样才能实现点击Button的时候,把C加载到panel上呢?我现在的做法是,用一个专门类(ShowPanelForm)是实现将窗体加载在panel上的,当Button和panel是在统一窗体上的时候,就能将窗体加载到panel上,可是Button和panel不在同一窗体的时候,就不行了
class ShowPanelForm
{
public void Show(System.Windows.Forms.Panel panel,System.Windows.Forms.Form form)
{
panel.Controls.Clear();
// InventoryManagement form = new InventoryManagement();
foreach (System.Windows.Forms.Form ff in panel.Controls)
{
//如果子窗体存在,激活子窗体
if (ff.Name == form.Name)
{
ff.Activate();
ff.Size = ff.Parent.Size;
ff.WindowState = System.Windows.Forms.FormWindowState.Maximized;
//((frmMain)parentWindow).s slblOperate.Text = ff.Text; return;
}
}
form.TopLevel = false;
panel.Controls.Add(form);
form.Show(); }
}
class ShowPanelForm
{
public void Show(System.Windows.Forms.Panel panel,System.Windows.Forms.Form form)
{
panel.Controls.Clear();
// InventoryManagement form = new InventoryManagement();
foreach (System.Windows.Forms.Form ff in panel.Controls)
{
//如果子窗体存在,激活子窗体
if (ff.Name == form.Name)
{
ff.Activate();
ff.Size = ff.Parent.Size;
ff.WindowState = System.Windows.Forms.FormWindowState.Maximized;
//((frmMain)parentWindow).s slblOperate.Text = ff.Text; return;
}
}
form.TopLevel = false;
panel.Controls.Add(form);
form.Show(); }
}
用委托来做试试
Public myPanel
{
set{panel1=value};
get{return panel1}
}
然后你在a窗体的button里就可以直接用它了
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace WindowsApplication297
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); Button B = new Button();
B.Parent = this;
B.Click += new EventHandler(B_Click); new Form2().Show();
new Form3().Show();
} void B_Click(object sender, EventArgs e)
{
Form F = Application.OpenForms["Form3"];
F.TopLevel = false;
F.Parent = Application.OpenForms["Form2"].Controls.Find("P", true)[0];
F.Dock = DockStyle.Fill;
}
} class Form2 : Form
{
public Form2()
{
this.Name = "Form2"; Panel P = new Panel();
P.Parent = this;
P.Name = "P";
P.Dock = DockStyle.Fill;
P.BackColor = Color.Black;
}
} class Form3 : Form
{
public Form3()
{
this.Name = "Form3";
}
}
}
{
ShowPanelForm frm = new ShowPanelForm();
Form2 frm2 = new Form2();
//frm.Show(panel1, frm2);// OK
Form3 frm3 = new Form3();
frm2.Show();
frm.Show(frm2.panel1, frm3);// OK
}
{
ShowPanelForm frm = new ShowPanelForm();
Form2 frm2 = new Form2();
//frm.Show(panel1, frm2);// OK
Form3 frm3 = new Form3();
frm2.Show();
frm.Show(frm2.panel1, frm3);// OK
}
可以!
//Form1
private void button1_Click(object sender, EventArgs e)
{
string filename = "test";
Form2 f2 = new Form2(filename);
f2.Show();
}
//Form2
string filename;
public Form2(string _filename)
{
InitializeComponent(); this.filename = _filename;
} private void Form2_Load(object sender, EventArgs e)
{
Form3 f3 = new Form3(filename);
f3.TopLevel = false;
f3.FormBorderStyle = FormBorderStyle.None;
this.panel1.Controls.Add(f3);
f3.Show();
} //Form3
private string title;
public Form3(string _title)
{
InitializeComponent(); title = _title;
} private void Form3_Load(object sender, EventArgs e)
{
this.label1.Text = title;
}
要注意ShowForm和Show的顺序啊 Show一定要在后面