c#WinForm窗体限制只能打开一次

问题描述:我目前做了一个主窗体,里面有个按钮,当点击按钮后弹出另一个子窗体;但我把子窗体最小化后再点击主窗体上的按钮,又会弹出一个新的子窗体。我想问下,该怎样实现无论点击... 问题描述:
我目前做了一个主窗体,里面有个按钮,当点击按钮后弹出另一个子窗体;但我把子窗体最小化后再点击主窗体上的按钮,又会弹出一个新的子窗体。我想问下,该怎样实现 无论点击多少次按钮,都只是显示一个子窗体。
麻烦知道的大侠们帮忙解决一下!
大概知道点意思了
展开
 我来答
百度网友bb2ba868f
2009-10-16 · TA获得超过863个赞
知道小有建树答主
回答量:330
采纳率:0%
帮助的人:308万
展开全部
主窗体:(假设叫做Form1)
public static Form2 f2;//声明窗体类静态变量
private void Button1_Click(object sender, EventArgs e)
{
if (f2 == null)
{
f2 = new Form2();//将主窗体对象传递过去
f2.Show();
}
else
{
f2.Activate();
}
}
Form2子窗体:
//子窗体的关闭事件
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
Form1.f2 = null;
}
rightmin
2009-10-16 · TA获得超过4124个赞
知道大有可为答主
回答量:2199
采纳率:0%
帮助的人:1793万
展开全部
1.第一种方法就是使用变量将窗体实例保存起来,如果这个变量是空的,就生成一个窗体实例。
Form form;
private void Button_Click(object sender,EventArgs e)
{
if(form==null){form=new Form1();}
form.Show();
}

2,将窗体用单例模式包装一下。
单例模式顾名思义,就是只有一个实例。
作为对象的创建模式[GOF95], 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
单例模式的要点
显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

参考资料: http://baike.baidu.com/view/1859857.htm

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
顺眼还虔诚丶喜鹊8195
2009-10-16 · TA获得超过890个赞
知道小有建树答主
回答量:1287
采纳率:0%
帮助的人:936万
展开全部
不知道你用的是不是mdi窗体,如果是,我这里是这样解决的
下面这段代码是判断子窗体是否打开了
public bool checkchildFrmExist(string childFrmName)
{
foreach (Form childFrm in this.MdiChildren)
{
if (childFrm.Text.ToString() == childFrmName)
{
if (childFrm.WindowState == FormWindowState.Minimized)
{
childFrm.WindowState = FormWindowState.Normal;

}
childFrm.Activate();

return true;

}
}
return false;
}

打开子窗体代码
if (checkchildFrmExist("总生产单") == true) { return; }
Frm_总生产单 form1 = new Frm_总生产单();
form1.MdiParent = this;
form1.Show();
form1.WindowState = FormWindowState.Maximized;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
finalyfantasy
2009-10-16 · TA获得超过1364个赞
知道小有建树答主
回答量:1631
采纳率:0%
帮助的人:577万
展开全部
Form.ShowDialog()窗体只打开一次,但按钮不能再操作

如果允许按钮点击,设变量
bool IsSubFormOpened = false;
Form f ;
private void button2_Click(object sender, EventArgs e)
{
if (!IsSubFormOpened)
{
f = new Form();
f.Load += new EventHandler(f_Load);
f.FormClosed += new FormClosedEventHandler(f_FormClosed);
f.Show();
}
else
{
f.WindowState = FormWindowState.Normal;
}
}

void f_Load(object sender, EventArgs e)
{
IsSubFormOpened = true;
}

void f_FormClosed(object sender, FormClosedEventArgs e)
{
IsSubFormOpened = false;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
淡俭项绸
2019-11-25 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:29%
帮助的人:1218万
展开全部
Form.ShowDialog()窗体只打开一次,但按钮不能再操作
如果允许按钮点击,设变量
bool
IsSubFormOpened
=
false;
Form
f
;
private
void
button2_Click(object
sender,
EventArgs
e)
{
if
(!IsSubFormOpened)
{
f
=
new
Form();
f.Load
+=
new
EventHandler(f_Load);
f.FormClosed
+=
new
FormClosedEventHandler(f_FormClosed);
f.Show();
}
else
{
f.WindowState
=
FormWindowState.Normal;
}
}
void
f_Load(object
sender,
EventArgs
e)
{
IsSubFormOpened
=
true;
}
void
f_FormClosed(object
sender,
FormClosedEventArgs
e)
{
IsSubFormOpened
=
false;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式