Bar.Merge() ,没有合并

Bar.Merge(),时可合并时不可合并。


不能合并的原因如下:


        场景:

                Form1(主窗体)、

                Form2(自定义弹出窗体)、

                UserControl1(自定义控件1,含有Merge方法,用来合并UserControl2的菜单)、

                UserControl2(自定义控件2)

        调用顺序:

                在Form1点击按钮,弹出Form2;

                在Form2窗体中显示UserControl1;

                在UserControl1中合并UserControl2的菜单。


        此时,直接Merge()是不能成功的。不管你是在UserControl1中Merge,还是在Form1中Merge。


        解决方法:

                在Form2中添加Load事件。然后在Load事件中加入Merge。

解决后代码如下:

        Form1:

            UserControl1 uc1 = new UserControl1();
            Form2.Show4Merge(uc1, "uc11", true, FormWindowState.Normal, false);


        Form2:

          static UserControl1 uc1 = null;

          public static void Show4Merge(UserControl1 ucBase, string title, bool showDialog, FormWindowState formWindowState, bool keyPreview)
          {
            if (ucBase == null)
            {
                return;
            }


            Form2 frm = new Form2();
            frm.KeyPreview = keyPreview;
            frm.Text = title;
            frm.Width = ucBase.Width + 2;
            frm.Height = ucBase.Height + 27;
            frm.WindowState = formWindowState;
            frm.Load += new EventHandler(frm_Load);
            uc1 = ucBase;

            if (showDialog)
            {
                frm.ShowDialog();
            }
            else
            {
                frm.Show();
            }
        }


        static void frm_Load(object sender, EventArgs e)
        {
            Form frm = sender as Form;
            frm.Controls.Add(uc1);
            uc1.Dock = DockStyle.Fill;
            uc1.Select();
            uc1.InitData();
        }


        UserControl1:

        public void InitData()
        {
            UserControl2 uc2 = new UserControl2();
            uc2.Parent = panelControl1;
            uc2.Dock = DockStyle.Fill;
            mergeMenuBars(uc2.BarManager);
        }

你可能感兴趣的:(Bar.Merge() ,没有合并)