c#WinForm窗体限制只能打开一次
问题描述:我目前做了一个主窗体,里面有个按钮,当点击按钮后弹出另一个子窗体;但我把子窗体最小化后再点击主窗体上的按钮,又会弹出一个新的子窗体。我想问下,该怎样实现无论点击...
问题描述:
我目前做了一个主窗体,里面有个按钮,当点击按钮后弹出另一个子窗体;但我把子窗体最小化后再点击主窗体上的按钮,又会弹出一个新的子窗体。我想问下,该怎样实现 无论点击多少次按钮,都只是显示一个子窗体。
麻烦知道的大侠们帮忙解决一下!
大概知道点意思了 展开
我目前做了一个主窗体,里面有个按钮,当点击按钮后弹出另一个子窗体;但我把子窗体最小化后再点击主窗体上的按钮,又会弹出一个新的子窗体。我想问下,该怎样实现 无论点击多少次按钮,都只是显示一个子窗体。
麻烦知道的大侠们帮忙解决一下!
大概知道点意思了 展开
10个回答
展开全部
主窗体:(假设叫做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;
}
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;
}
展开全部
1.第一种方法就是使用变量将窗体实例保存起来,如果这个变量是空的,就生成一个窗体实例。
Form form;
private void Button_Click(object sender,EventArgs e)
{
if(form==null){form=new Form1();}
form.Show();
}
2,将窗体用单例模式包装一下。
单例模式顾名思义,就是只有一个实例。
作为对象的创建模式[GOF95], 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
单例模式的要点
显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道你用的是不是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;
下面这段代码是判断子窗体是否打开了
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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
如果允许按钮点击,设变量
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
如果允许按钮点击,设变量
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询