社区
C#
帖子详情
请问在C#中,如何设置一个子窗体只能打开一个实例
zhuangmin
2005-07-19 08:09:40
RT,在一个母窗体添加一个子窗体,点一下button就开一个。
怎样保证只能开一个。
谢谢
...全文
958
18
打赏
收藏
请问在C#中,如何设置一个子窗体只能打开一个实例
RT,在一个母窗体添加一个子窗体,点一下button就开一个。 怎样保证只能开一个。 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dofine
2005-07-19
打赏
举报
回复
mark
Jimyu1110
2005-07-19
打赏
举报
回复
如果你要打开的窗体是MDI窗体的话,可以写一个通用的方法进行处理.
/// <summary>
/// 执行子MDI窗体
/// </summary>
/// <param name="ParentForm">父窗体</param>
/// <param name="t">要执行的窗体的类型</param>
public static void RunForm(System.Windows.Forms.Form ParentForm,System.Type t)
{
try
{
bool bl=false;
foreach(Form objForm in ParentForm.MdiChildren)
{
if(objForm.Name.Trim().Equals(t.Name))
{
objForm.Activate();
bl=true;
break;
}
}
if(bl) return;
object o=t.GetConstructor(new Type[]{}).Invoke(new object[]{});
o.GetType().InvokeMember("MdiParent",System.Reflection.BindingFlags.SetProperty,null,o,new object[]{ParentForm});
o.GetType().InvokeMember("Show",System.Reflection.BindingFlags.InvokeMethod,null,o,new object[]{});
}
catch
{
System.Windows.Forms.MessageBox.Show(ParentForm,"无法显示子窗体","显示子窗体错误",MessageBoxButtons.OK);
}
}
但如果要打开的窗体是非模式但又不是MDI模式的话,你可以通过设置Owner或ParentForm,然后在新打开一个窗体之前去判断是否已经存在于OwnedForms即可
cavtcmgt
2005-07-19
打赏
举报
回复
在窗体加载时定义一个变量,初始设置为True,打开一个窗体后设置为False就可以了!
woyaomoney
2005-07-19
打赏
举报
回复
singleton模式,查查
happyapple050429
2005-07-19
打赏
举报
回复
以下是我现在用的方法之一,希望对你有帮助。
不过这类问题好像问过很多次了,建议你以后问之前先搜索下。
private static 窗体名 窗体名_child;
private void 菜单_Click(object sender, System.EventArgs e)
{
窗体名 窗体名_child = GetProdspecForm();
//如果已经打开并且最小化了,则恢复成正常状态
if (窗体名_child.WindowState==FormWindowState.Minimized)
{
窗体名_child.WindowState=FormWindowState.Normal;
窗体名_child.BringToFront();
}
else
窗体名_child.Show();
窗体名_child.Activate();
}
private 窗体名 GetProdspecForm()//判断窗体是否已打开
{
if( 窗体名_child == null || 窗体名_child.IsDisposed )
{
窗体名_child = new 窗体名(this);
窗体名_child.MdiParent = this;
}
return 窗体名_child;
}
soulroom
2005-07-19
打赏
举报
回复
public static readonly Form2 frm2=new Form2();
liuq
2005-07-19
打赏
举报
回复
static void Main(string[] args)
{
//保证该程序只有一个在运行
bool createdNew;
System.Threading.Mutex mutex_Application = new System.Threading.Mutex(true,"test",out createdNew);
if (!createdNew)
{
MessageBox.Show("本程序只允许同时运行一个!");
return;
}
Application.Run();
}
zk911
2005-07-19
打赏
举报
回复
new 窗体().show();
cdo
2005-07-19
打赏
举报
回复
一种是调用winapi来查找是否已有子窗体,还有一种你可以在主窗体里定义一个标记,打开子窗体后设置为true,关闭后设回false.
wangzhiyong71
2005-07-19
打赏
举报
回复
private Form2 frm2;
private void button1_Click(object sender, System.EventArgs e)
{
if(frm2== null||frm2.IsDisposed )
{
frm2= new Form2();
frm2.MdiParent = this;
frm2.Show();
}
else
{
frm2.Activate();
frm2.WindowState = FormWindowState.Normal;
}
}
julong88
2005-07-19
打赏
举报
回复
有个api函数好像叫
findwindow();
查一下
sfanpu
2005-07-19
打赏
举报
回复
可以使用Singleton设计模式的
机器人
2005-07-19
打赏
举报
回复
private Form2 frm2;
if( frm2 == null )
{
frm2 = new Form2();
frm2.show();
}
xidu007
2005-07-19
打赏
举报
回复
Form2 frm2=new Form2();
frm2.show();
vwen
2005-07-19
打赏
举报
回复
用singleton模式,
private static MainFrm instance = null;
public static MainFrm Instance{
set{
}
get{
if(instance == null){
new MainFrm();
}
return instance;
}
}
public MainFrm() {
instance = this;
}
private void MainFrm_Closed(object sender, System.EventArgs e) {
instance = null;
}
一杯清茶几行代码
2005-07-19
打赏
举报
回复
用singleton 模式
在需要仅产生一个实例的窗口类中,把构造函数定义成私有的,并且提供一个获取实例的方法,该方法保证仅生成一个实例
说的有点啰嗦,不过你提这个问题说明你也许不了解singleton模式
salmon230
2005-07-19
打赏
举报
回复
这个声明放在click外
zhuangmin
2005-07-19
打赏
举报
回复
private Form2 frm2;
老提示private无效~
在Form2之前插入其他修饰符也不行哦~
放在button_click事件代码里~
c#
防止
打开
重复
子
窗体
bool cwExists = false; //
子
窗体
是否已经存在 foreach (System.Windows.Forms.Form ff in parentWindow.MdiChildren) { //把活动的
子
窗体
最小化 ff.WindowState = System.Windows.Forms.FormWindowState.Minimized; //如果是要
打开
的
子
窗体
,激活并还原
子
窗体
if (ff.Name == childrenWindow.Name) { ff.Activate(); //ff.Size = ff.Parent.Size; ff.WindowState = System.Windows.Forms.FormWindowState.Normal; ff.Left = ff.Top = 0; //
打开
位置居于左上角 cwExists = true; //
子
窗体
存在 } } //
子
窗体
不存在,
打开
子
窗体
if (cwExists == false) { parentWindow.IsMdiContainer = true; childrenWindow.MdiParent = parentWindow; childrenWindow.WindowState = System.Windows.Forms.FormWindowState.Normal; childrenWindow.Show(); childrenWindow.Left = childrenWindow.Top = 0; //
打开
位置居于左上角 }
C#
MDI导航
子
窗体
子
窗体
只运行一次
总体来说例
子
有以下几个功能: 1、图形化导航界面。 2、可以使
子
窗口只运行一次,即
C#
MDI
子
窗体
只有
一个
实例
。 3、可以定位到某个
子
窗口,并调用其函数。 这是个简单的例
子
,不过却是打好了
一个
框架。
子
窗口置底函数是...同一类型的
子
窗口只
打开
一个
...调用示例... 全文:http://www.our-code.com/news/2010728/n355876.html
C#
WinForm案例_父MDI
窗体
不重复
打开
子
窗体
附件
中
包含
一个
C#
WinForm
中
父MDI
窗体
不重复
打开
子
窗体
的案例,父
窗体
在
打开
子
窗体
之前先判断
子
窗体
是否存在,若存在则激活;若不存在,
实例
化并
打开
子
窗体
。开发环境:VS2012。
C#
传递主
窗体
句柄并在
子
窗体
调用其函数改变其控件的例
子
本程序是完整的项目文件,在VS2008下运行成功,程序功能:通过传递主
窗体
句柄,然后
打开
子
窗体
,在
子
窗体
中
可对主
窗体
的控件或函数进行操作,改变其控件属性 ,调用主
窗体
的函数,(注:在调用前要修改主
窗体
被调用控件或函数的属性为PUBLIC)
C#
两个
窗体
之间实时传递数据的
实例
C#
两个
窗体
之间实时传递数据的
实例
。利用委托和事件的方法,从
子
窗体
传送数据到主
窗体
。比较安全。
C#
110,477
社区成员
642,563
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章