日期:2014-05-19  浏览次数:20733 次

怎么实现一个系统里的每个窗体只能开一个
不是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,模式