请问C#用panel切换窗体是怎样的,急急急,先谢谢各位大侠啦

我设置了一个菜单和两个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();
}