解决方案 »

  1.   

    弹出的Form继承你放菜单的这个form
      

  2.   

    完全没看懂你这是要闹哪样
    既然已经做好了form,为什么要把里面控件都扣出来重新放到panel里,这有什么意义吗给你2个思路
    1.不要用form,用用户控件,然后把用户控件直接add进panel里
    2.把form作为MDI子窗体嵌入panel里
      

  3.   

    //记录添加到panel 中的 form.
    private static List<Form> frmList = new List<Form>();        /// <summary>
            /// 在容器中显示窗体
            /// </summary>
            /// <param name="parent">父容器</param>
            /// <param name="form">窗体名称</param>
            /// <param name="pos">窗体初始位置</param>
            /// <param name="state">窗体显示模式</param>
            /// <returns></returns>
            public static bool CreateFormClass(Panel parent, Form form, FormStartPosition pos, FormWindowState state)
            {
                try
                {
                    if (parent != null)
                    {
                        if (frmList != null)
                        {
                            while (frmList.Count > 0)
                            {
                                frmList[0].Close();
                                frmList[0].Dispose();
                                frmList.Remove(frmList[0]);
                            }
                        }
                        if (parent.HasChildren)
                        {
                            parent.Controls.Clear();
                        }
                        form.TopLevel = false;
                        form.Parent = parent;
                        form.WindowState = state;
                        form.StartPosition = pos;
                        form.Show();
                        frmList.Add(form);
                        return true;
                    }
                    else
                    {
                        form.Parent = null;
                        form.TopLevel = true;
                        switch (state)
                        {
                            case FormWindowState.Maximized:
                            {
                                form.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
                                form.WindowState = FormWindowState.Maximized;
                                break;
                            }
                            default:
                            {
                                form.WindowState = state;
                                break;
                            }
                        }
                        form.StartPosition = pos;
                        form.ShowDialog();
                        return true;
                    }
                }
                catch (Exception ex)
                {
                    return false;
                }
            }我这里每次new 新form 时,  都将之前的释放了.可以将窗体显示在容器中, 也可以以指定方式的显示..
    楼主可以修改下试试.
      

  4.   

    form 也是一个容器,  你直接将form 整体的加入到panel 里面就好了  
      

  5.   

    如何将form整体的加入到panel里面
    我也想这样
    可是不知道如何实现,谢谢
      

  6.   

    如何将form整体的加入到panel里面
    我也想这样
    可是不知道如何实现,谢谢
    首先,要嵌入的窗体必须设置MDIContainer为true
    然后,new form的时候
    Form2 fm=new Form2();
    fm.MDIParent=this;
    panel1.Controls.Add(fm);
    fm.Show();
      

  7.   

    或者你像我上面讲的,不要使用form,改为用户控件,这样添加的时候会少许多麻烦
      

  8.   

    在说明下前提
    我是做ArcGIS engine+C#开发的
    开始都是用command或itool做的
    但是Command、Itool中的form不能在主窗口中停靠
    所以在主窗口中动态panel,然后把form的控件加载到panel中
    可以实现在主窗口的停靠。
      

  9.   


    您说的对,直接改为用户控件,可以实现;这样在主窗口会多很多代码。
    我还有很多工具条,如果都放在主窗口
    代码太多。

    代码只会减少,怎么可能会多.其实就跟你放到form里是一样的,既然控件放到form里,代码也写到form里
    改成用户控件,你也把代码写在用户控件里啊
    这样起码你主窗体不需要设置为MDI容器,也不需要设置子窗体的parent
      

  10.   

    现在问题是,不是用户控件
    主窗口的panel可以停靠
    如果直接在主窗口中加,代码会增加很多
      

  11.   

    UIPanel panel = new UIPanel();
                    panel.Size = new System.Drawing.Size(m_FormEditFeature.Width + 10, m_FormEditFeature.Height);
                    panel.Name = m_FormEditFeature.Name;
                    panel.Text = m_FormEditFeature.Text;                panel.DockStyle = PanelDockStyle.Right;
                    panel.DockState = PanelDockState.Docked;                //对象初始化
                    ((System.ComponentModel.ISupportInitialize)(panel)).BeginInit();
                    panel.Id = Guid.NewGuid();
                    //临时挂起控件的布局逻辑
                    panel.SuspendLayout();
                    m_UIPanelManager.Panels.Add(panel);
                    UIPanelInnerContainer panelContainer = new UIPanelInnerContainer();
                    panel.InnerContainer = panelContainer;                try
                    {
                        //插件必须保证ChildHWND正确,否则会发生异常
                        int r = m_FormEditFeature.Controls.Count;
                        for (int i = r - 1; i >= 0; i--)
                        {
                            panelContainer.Controls.Add(m_FormEditFeature.Controls[i]);     //(frm.Handle)
                        }
                        panelContainer.Dock = DockStyle.Fill;                    panelContainer.Location = new System.Drawing.Point(5, 30);
                        panelContainer.Name = m_FormEditFeature.Name + "Container";
                        panelContainer.Size = new System.Drawing.Size(panel.Width - 10, panel.Height - 30);
                        panelContainer.TabIndex = 0;
                    }
                    catch (Exception ex)
                    { MessageBox.Show(ex.Message, "异常提示!"); }                ((System.ComponentModel.ISupportInitialize)(panel)).EndInit();                m_FormEditFeature.FormIdentify_Load();
      

  12.   

    右侧如果只有两个panel,可以放个SplitContainer,Dock属性设置成Fill
    如果有多个panel,可以SplitContainer里再嵌套SplitContainer,或者根据窗体高度动态修改每个panel的大小
    位置不用管,只要把属性都设置成top,它自己就会跟着走了或者上面的设置成top,最下面的设置成fill