我设置了一个菜单和两个panel 1 和2,想分别显示窗体Form2和Form3,代码如下,但是结果没法进行切换,请问应当怎样写代码?新手,谢谢
private void 时间换算ToolStripMenuItem_Click(object sender, EventArgs e)
{
panel1.Controls.Clear();//移除所有控件
Form2 frm2 = new Form2();
frm2.TopLevel = false;
frm2.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
frm2.Dock = DockStyle.Fill;
frm2.Show();
}
private void 卫星位置计算ToolStripMenuItem_Click(object sender, EventArgs e)
{
panel2.Controls.Clear();//移除所有控件
Form3 frm3 = new Form3();
frm3.TopLevel = false;
frm3.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
frm3.Dock = DockStyle.Fill;
this.panel2.Controls.Add(frm3);
frm3.Show();
}
参考:
http://blog.sina.com.cn/s/blog_711648580100nsa5.html
http://www.cnblogs.com/csMapx/archive/2011/06/11/2078126.html
你的代码没看出什么问题
不知道你说的切换是什么意思,我的理解是让Panel2和Panel3切换,连带里面的Form就切换了
直接设置Panel的Visible就可以了
一般不都是通过IsMdiContainer 和设置form.MdiParent 来设置主子窗体的么?
设置visible,或者bringtofront,感觉tablepage更好用
你现在程序运行的效果是什么,哪里不对
Panel1和Panel2是并列显示在窗体上还是如何,你想做成什么样。
那你只要设置panel1.Visible = true;panel2.Visible = false;
另一个panel2.Visible = true;panel1.Visible = false;
时间换算里面少了一句 this.panel1.Controls.Add(frm2);
常见的思路,用一个panel,两个form,但是两个form是在外面定义的。例如:
public class MainForm : Form
{
Form2 frm2;
Form3 frm3;
public MainForm()
{
frm2=new Form2();
...
frm3=new Form3();
...
this.panel1.Controls.Add(frm2);
this.panel1.Controls.Add(frm3);
frm2.Show();
frm3.Show();
frm2.Visible=true;
frm3.Visible=false;
}
private void Click1(object sender, EventArgs e)
{
frm2.Visible=false;
frm3.Visible=true;
}
private void Click2(object sender, EventArgs e)
{
frm2.Visible=true;
frm3.Visible=false;
}
}
上面是伪代码,大概的思路是这样。有兴趣自己摸索一下。
我是采用动态加载:
public TabPage Show_Form(string FormTitle, string FormName)
{
if (FormName != "")
{
ObjectHandle obj = Activator.CreateInstance(null, FormName);
//obj.Unwrap返回被包装的对象
if (obj != null)
{
Form frm = (Form)obj.Unwrap();
return initFrom(frm, FormTitle);
}
else
{
return null;
}
}
else
{
return null;
}
//switch (FormTitle)
//{
// case "录入制程COB绑测":
// ERPSystem.QA.录入制程COB绑测 frm2=new QA.录入制程COB绑测();
// return initFrom(frm2, FormTitle);
// default:
// return null;
//}
}
/// <summary>
/// 表单动态加载到页签
/// </summary>
/// <param name="frm"></param>
/// <param name="Name"></param>
/// <returns></returns>
private TabPage initFrom(Form frm, String Name)
{
if (!string.IsNullOrEmpty(Name))
{
frm.Text = Name;
frm.TopLevel = false;
TabPage tp = new TabPage(Name);
frm.FormBorderStyle = FormBorderStyle.None;
tp.Controls.Add(frm);
frm.Dock = DockStyle.Fill;
frm.Show();
return tp;
}
else
{
return null;
}
}
Panel里不能承载form。
可以考虑mdi模式。
你都没有把窗体添加到panel里面。当然切换不了了。
private void 时间换算ToolStripMenuItem_Click(object sender, EventArgs e)
{
panel1.Controls.Clear();//移除所有控件
Form2 frm2 = new Form2();
frm2.TopLevel = false;
frm2.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
frm2.Dock = DockStyle.Fill;
panel1.Controls.Add(frm2);
frm2.Show();
}