怎么实现一个系统里的每个窗体只能开一个
不是MDI子窗体,也不用ShowDailog,就用Show,如何实现
------解决方案--------------------form f
if(f==null)
f=new form();
在用完后f.dispose();
------解决方案--------------------学习
------解决方案--------------------首先,将打开的窗体设定为原窗体的子窗体,子窗体关闭时不要真的关闭,只是hide。(避免多次初始化),需要刷新数据时,遍历一下父窗体的所有子窗体,找到需要操作的子窗体,利用静态类传递数据给子窗体。
------解决方案--------------------单键模式 设计模式的一种 自己到网上搜索一下 给你一个设计模式的地址看看
http://www.webexpress.cn 里面有设计模式的详细说明
------解决方案--------------------实现此功能代码如下:
// 页面显示之前设置光标为沙漏形状
this.Cursor = Cursors.WaitCursor;
FormCollection forms = Application.OpenForms;
Form MDIForm = new Form();
bool isOpen = false;
// 在打开的窗口中找到MDI(主)窗体
foreach (Form form in forms)
{
// 如果已经打开(运行),则不再打开
if (form is ManagerForm)
{
isOpen = true;
form.Activate();
}
if (form is MainForm)
{
MDIForm = form;
}
}
// 如果没有打开,则打开.
if (isOpen == false)
{
ManagerForm manageForm = new ManagerForm();
manageForm.MdiParent = MDIForm;
manageForm.Width = MDIForm.Width;
manageForm.Height = MDIForm.Height;
manageForm.Show();
}
// 页面显示完毕,将光标置回默认
this.Cursor = Cursors.Default;
------解决方案--------------------LZ的方法已经算是不错的了,优化一下就是:
private form1 f1
然后在Show的地方这样写:
if(f1 == null)
{
f1 = new form1();
}
f1.Show();
在form1的关闭事件里面
f1.Hide();
在主窗体的关闭事件里面
if(f1 != null)
{
f1.Close();
}
------解决方案--------------------不提供构造函数,只提供静态的instance
------解决方案--------------------如果打开了,把焦点设过去,如果没打开的话,打开!
------解决方案--------------------单件模式
------解决方案--------------------Singleton,模式