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);
}