如何实现一个窗体,同一时刻只能被打开一次呢?

tmp_gogoto 2011-07-27 02:42:48
如何实现一个窗体,同一时刻只能被打开一次呢?
------------------------------------------------
有一个主窗体,功能是编辑业务单,
这个主窗体上有一个按钮,点击后出现一个“业务单查询窗体”,我想实现这个“业务单查询窗体”不能打开多个,如何实现呢?

我有两种思路,不知哪种好?
1.让这个“业务单查询窗体”成为模式窗体,这样的话,用户每次选择业务单后,都要关闭这个窗体的。所以保证了该窗体不会被重复打开多次。
可是,如何让窗体成为“模式窗体”呢?

2.这个“业务单查询窗体”就是普通的窗体。可是我要实现不能同时打开多个,如何实现呢?
...全文
237 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Form.ShowDialog(this);
mjay0210 2011-07-27
  • 打赏
  • 举报
回复
构造函数单体模式

或者任意能表示这个窗口被创建并打开
yuandonghuia 2011-07-27
  • 打赏
  • 举报
回复
你没有最基本的面向对象的思想。。所以你感觉到困难,最好的方法还是弄懂什么是单例模式
chine_tan 2011-07-27
  • 打赏
  • 举报
回复
private static Form1 form = null;

public static Form1 GetInstance()
{
if (form == null || form.IsDisposed)
{
form = new SingletonForm();
}
return form;
}
在窗体里加一个这样的静态方法,返回一个窗体,当你在别的地方要实例化显示这个窗体的时候,就通过访问这个方法得到一个窗体。这样由始至终也是只能打开一个窗体
Tylqd 2011-07-27
  • 打赏
  • 举报
回复
单列窗口
tengmingttmm 2011-07-27
  • 打赏
  • 举报
回复
先将以前的窗体隐藏用HIDE隐藏,然后将要打开的窗体用Show显示出来
validtimes 2011-07-27
  • 打赏
  • 举报
回复
建议阅读一些设计模式方面的书籍,可以帮到你很多。

[Quote=引用 10 楼 validtimes 的回复:]
使用单例模式,给你写个例子:

需要实例的时候使用getInstance方法,而不要用new.


C# code

public partial class frm_StockForm : Form
{
public static bool showhistorystock = true;



//单例模式使用的inst……
[/Quote]
validtimes 2011-07-27
  • 打赏
  • 举报
回复
使用单例模式,给你写个例子:

需要实例的时候使用getInstance方法,而不要用new.

    public partial class frm_StockForm : Form
{
public static bool showhistorystock = true;



//单例模式使用的instance;
private static frm_StockForm stockview;

private frm_StockForm()
{
InitializeComponent();

}


//获得库存表窗体的唯一实例
public static frm_StockForm getInstance()
{
if (stockview == null || stockview.IsDisposed)
stockview = new frm_StockForm();
return stockview;
}
}
xuexiaodong2009 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kakaniuren 的回复:]

子窗体同一时间只能打开一次?
showDialog()不就行了。
[/Quote]对啊
lele1028265767 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kakaniuren 的回复:]

子窗体同一时间只能打开一次?
showDialog()不就行了。
[/Quote]
对啊,为什么不用这个呢?
kakaniuren 2011-07-27
  • 打赏
  • 举报
回复
子窗体同一时间只能打开一次?
showDialog()不就行了。
cxs99999 2011-07-27
  • 打赏
  • 举报
回复
public static bool IsShow(string formName, Form fatherform)
{
foreach (Form form in fatherform.MdiChildren)
{
if (form.Name.Equals(formName))
{
form.WindowState = FormWindowState.Normal;
form.Activate();
return true;
}
}
return false;
}
程序猿CKeen 2011-07-27
  • 打赏
  • 举报
回复
窗体设置成单例模式窗体,可以实现
binarie 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tmp_gogoto 的回复:]

引用 1 楼 binarie 的回复:

在父窗体的代码中定义该子窗体为静态变量,在父窗体初始化时就初始化。
每次打开此窗体时,访问静态变量的Show方法,而不实例化新的窗体。

我试了,我在“业务单查询窗体”中有一个推出按钮,代码是 this.close();
这样关闭后,下次再打开时(frm.show())就出错了,提示:

无法访问已释放的对象。

如何解决呢
[/Quote]

使用Hide退出窗体
ohkuy 2011-07-27
  • 打赏
  • 举报
回复
这个问题简单,你做个将业务单窗体做成单例窗体就行了
tmp_gogoto 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 binarie 的回复:]

在父窗体的代码中定义该子窗体为静态变量,在父窗体初始化时就初始化。
每次打开此窗体时,访问静态变量的Show方法,而不实例化新的窗体。
[/Quote]
我试了,我在“业务单查询窗体”中有一个推出按钮,代码是 this.close();
这样关闭后,下次再打开时(frm.show())就出错了,提示:

无法访问已释放的对象。

如何解决呢
binarie 2011-07-27
  • 打赏
  • 举报
回复
在父窗体的代码中定义该子窗体为静态变量,在父窗体初始化时就初始化。
每次打开此窗体时,访问静态变量的Show方法,而不实例化新的窗体。

111,119

社区成员

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

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

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