panel控件中加载多个窗体,如何判断,不存在就实例化,存在就显示已有的窗体呢?

tmp_gogoto 2011-08-30 12:03:00
panel控件中加载多个窗体,如何判断,不存在就实例化,存在就显示已有的窗体呢?
-------------------------------------
我通过一个 treeview 显示菜单,用户选择一个菜单后,就调用相应的窗体。
我把不同的窗体,全部加载到一个panel控件中,
但是,我如何判断某个窗体,已经加载了呢?
总不能,每次都 new Form()吧。
我想,如果实例化了,就直接显示窗体,否则就实例化窗体。

请大家给我思路,难在这里了,谢谢。
...全文
172 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
给你几个思路,遍历panel中的contrls,判断类型是不是窗体,查找是否有你需要的窗体,有就show,没有就new。
第二,每个窗体都初始化的时候都加上tag属性,里面存放你觉得合适的窗体特征。遍历conteols,判断tag。
shaofei830927 2011-08-30
  • 打赏
  • 举报
回复
方法1 加属性 保存已经实例化的窗体 属性为null就new一个 不为null就直接show
方法2 窗体单例 注意单例后 窗体close了 就回不来了 只要show 和 hide 就行
白鸽 2011-08-30
  • 打赏
  • 举报
回复
每个窗体下都定义一个变量之类的!每次点击树节点时,给相应的窗体中的变量赋值,并且窗体在每次激活或者加载时,判断变量的值,比如true false。如果为true显示,false隐藏
  • 打赏
  • 举报
回复
Application.OpenForms
这个比panel好用多了
csproj 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xomix 的回复:]

问题是我刚才测试了一下你的说法,form是无法添加到panel里面的,你要添加的到底是啥?
[/Quote]

把窗体的TopLevel 设为 false就可以添加了,
添加之后还是要调用show方法才会显示
  • 打赏
  • 举报
回复

foreach (Control ctl in panel1.Controls)
{
if (ctl.GetType() == this.GetType())
{
if ((Form)ctl.Tag.ToString() == "Form2")
{
ctl.Show();
return;
}
}
}
Form2 fm2 = new Form2();
fm2.Tag = "Form2";
panel1.Controls.Add(fm2);
fm2.Show();


我测试是没法通过的,因为panel里面不能添加顶级控件。
一个用户只能连续回复三次你妹哦
tmp_gogoto 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shaofei830927 的回复:]

方法2 窗体单例 注意单例后 窗体close了 就回不来了 只要show 和 hide 就行
[/Quote]
什么意思,请指教,为何回不来了。
  • 打赏
  • 举报
回复

foreach (Control ctl in panel1.Controls)
{
if (ctl.GetType() == this.GetType())
{
if ((Form)ctl == new Form2())
{
ctl.Show();
return;
}
}
}
Form2 fm2 = new Form2();
panel1.Controls.Add(fm2);
fm2.Show();

第一种方案,可能失败。
  • 打赏
  • 举报
回复
问题是我刚才测试了一下你的说法,form是无法添加到panel里面的,你要添加的到底是啥?

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧