c#中让Windows窗体只运行一次,并在第二次启动窗体时激活该窗体

来源:互联网 发布:马思纯演技知乎 编辑:程序博客网 时间:2024/05/20 05:26


<script type="text/javascript"><!--google_ad_client = "pub-1485292068704639";//468x15, 创建于 07-12-13google_ad_slot = "6345658011";google_ad_width = 468;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-1485292068704639";google_ad_width = 336;google_ad_height = 280;google_ad_format = "336x280_as";google_ad_type = "text_image";google_ad_channel ="";google_color_border = "FFFFFF";google_color_bg = "FFFFFF";google_color_link = "0000FF";google_color_text = "000000";google_color_url = "008000";//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

我曾经用过Mutex的方法来实现窗体的互斥运行。。但是会出现失效混乱的情况,令我苦恼不已。

Mutex的方法如下:

using System.Threading;    bool Create;  

Mutex m =new Mutex( false, "name", out Create );

if( Create ) Application.Run(new FormName());

我想出了这样一个办法:

1.在主窗体MainFrm的定义静态的bool boolFrmName变量,用于存储窗体的运行状态

2.在需要启动的窗体FormName中也要创建静态Form变量,

public static Form thisForm = new Form();

并在该窗体的Load事件中给thisForm变量赋值 thisForm=this;

2.在解决方案中添加一个类Judge,将类改成static类型,在类中添加如下方法:

public static void RunForm(string FormName)

{

switch(FormName)

case"RunFormName": MainFrm.boolFrmName=true; break;

case"CloseFromName":MainFrm.boolFrmName=false;break;

default: break;

}

3.在启动时先检测窗体是否被运行,如果窗体已经运行则激活该窗体

if(boolFrm==false) FormName newForm = new FormName(); newForm.Show(); Judeg.RunForm("RunFormName");

else FormName.thisForm.Activate();

原创粉丝点击