在自定义的panel中动态加载窗体解决方法
在自定义的panel中动态加载窗体
[size=13px]在菜单点击一个菜单项,弹出一个form,我想实现这个form中的空间全部加载到一个panel中;
控件我加载进去了,可是form及里面的控件对应的事件我没加载进去,请问要如何处理?
for (int i = r - 1; i >= 0; i--)
{
panelContainer.Controls.Add(m_FormEditFeature.Controls[i]); //(frm.Handle)
}
controls[i]对应的事件如何加载到 panelContainer 中。[/size]
------解决思路----------------------
//记录添加到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 时, 都将之前的释放了.
可以将窗体显示在容器中, 也可以以指定方式的显示..
楼主可以修改下试试.
------解决思路----------------------
右侧如果只有两个panel,可以放个SplitContainer,Dock属性设置成Fill
如果有多个panel,可以SplitContainer里再嵌套SplitContainer,或者根据窗体高度动态修改每个panel的大小
位置不用管,只要把属性都设置成top,它自己就会跟着走了
或者上面的设置成top,最下面的设置成fill
[size=13px]在菜单点击一个菜单项,弹出一个form,我想实现这个form中的空间全部加载到一个panel中;
控件我加载进去了,可是form及里面的控件对应的事件我没加载进去,请问要如何处理?
for (int i = r - 1; i >= 0; i--)
{
panelContainer.Controls.Add(m_FormEditFeature.Controls[i]); //(frm.Handle)
}
controls[i]对应的事件如何加载到 panelContainer 中。[/size]
------解决思路----------------------
//记录添加到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 时, 都将之前的释放了.
可以将窗体显示在容器中, 也可以以指定方式的显示..
楼主可以修改下试试.
------解决思路----------------------
右侧如果只有两个panel,可以放个SplitContainer,Dock属性设置成Fill
如果有多个panel,可以SplitContainer里再嵌套SplitContainer,或者根据窗体高度动态修改每个panel的大小
位置不用管,只要把属性都设置成top,它自己就会跟着走了
或者上面的设置成top,最下面的设置成fill