在C#中解决窗体重复创建的问题
一、问题描述
在C#Windows窗体应用中,我们经常遇到这样的问题
当我们触发一个窗口命令时,比如下方:
我连续点击其中一个命令,会出现多个同样的窗口:
我们的目标是,不管点击多少次,都只出现一次;
二、具体程序说明
第一步我们将该窗体(多从点击重复出现的窗体)名称定义为公共全局变量:
public static 窗体名称a1 随意变量名称b1= null;
这行代码表示创建了一个可以公共访问的静态变量b1 ,可以在应用程序的任何地方通过 a1.b1来访问,最开始这个变量没有引用任何实例,所以它的值是 null。
第二步就是写触发窗体弹出的按钮的命令:
private void 按钮名称_Click(object sender, EventArgs e)
{
if (b1== null) //如果窗体不存在,创建新的窗体
{
b1 = new a1();
b1.Show();
}
else //如果窗体已经存在,适使用原来的窗体,不创建新窗体
{
b1.Activate();//激活智能在最小化的时候其作用
b1.WindowState = FormWindowState.Normal;
}
}
-
if (b1 == null) { ... }
:
这是一个条件判断,检查静态变量b1
是否为null
。如果是null
,说明之前没有创建过a1
窗体的实例。 -
b1 = new a1();
:
如果b1
是null
,这行代码创建a1
类的一个新实例,并将其赋值给变量b1
。 -
b1.Show();
:
显示b1
窗体。如果之前窗体没有被创建,现在将其显示出来。 -
else { ... }
:
如果b1
不是null
,则进入这个 else 块,说明窗体已经创建过了。 -
b1.Activate();
:
这行代码调用b1
窗体上的Activate
方法。如果窗体已经存在但不是当前激活的窗口,这将使它成为活动窗口。如果窗体被最小化或者被其他窗口覆盖了,这个方法将确保用户注意到这个窗体。 -
b1.WindowState = FormWindowState.Normal;
:
设置objFrmAddStudent
窗体的WindowState
属性为FormWindowState.Normal
。这确保窗体是在正常的状态下显示而不是最小化或最大化。
当用户点击这个菜单项时,这个事件处理程序会检查是否已经存在一个a1
窗体实例。如果不存在,则创建一个新的实例并显示它。如果已经存在,那么它将确保窗体被激活并且显示在正常状态下。这样可以避免打开多个相同的窗体实例,并且确保窗体对用户可见且可用。
但是这样仍然有一个问题,那么就是当我们关闭这个窗口时,这个窗体并没有完全消失,只不过是我们看不到了,于是我们需要在这个窗体的属性页找到FormClosed双击:
编写以下程序:
a1.b1 = null;//当窗体关闭时,将窗体对象清理掉
原文地址:https://blog.csdn.net/wanganqiqi/article/details/137267956
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!