• 如何使窗体不重复被打开


      要使窗体不被重复打开,就要把已经打开的窗体保存下来进行轮寻,我们可以用ArrayList来保存已经打开的窗体实例,当new新的form时,对ArrayList中的Object进行逐个的比较,可以对form的name进行比较,也可以对form的Type进行比较(前者的效率比后者低)。虽然这个方法比较笨,但却十分有效,具体代码见下:

    MainForm.cs
    public static ArrayList FormList = new ArrayList();
    private void button1_Click(object sender, System.EventArgs e)
    {
         bool OnlyForm = true;
         foreach( Form f in FormList )
         {
             if( f is MyForm )
             {
                  f.Activate();
                  OnlyForm = false;
             }
         }
         if( OnlyForm )
         {
             MyForm temp = new MyForm ();
             temp.Owner = this;
             FormList.Add( temp );
             temp.Show();
         }
    }
    MyForm.cs
    private void MyForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
         MainForm.FormList.Remove( this );
    }
     
         首先在MainFormnew一个staticFormList,然后在打开窗体时在FromList中轮寻,找到与此类型相一致的就Activate(),否则就new一个新的form,并且加到FormList中,在form退出时千万别忘记把自己从FormList中退出来,就是用Removethis)就可以了。
         以上这个方法可以使当前不同类型的窗体同时运行,但是相同类型的文件只能打开一次。要是想让相同类型的窗体也可以运行,那么就要指定一个唯一的窗体标识,再轮寻这个标识。代码如下:
    private bool CheckFormActivate(string Name )
    {
         try
         {
             foreach( Form f in FormList )
                  if( f.Name.Equals(Name) )
                  {
                      f.Location = new Point( 0 , 0 );
                      f.Activate();
                      return false;
                  }
             return true;
         }
         catch( Exception ex )
         {
             MessageBox.Show( ex.Message );
             return true;
         }
    }
    private void button1_Click(object sender, System.EventArgs e)
    {
         if(CheckFormActivate(OnlyIdentification))
         {
             MyForm temp = new MyForm ();
             MyForm.Name = OnlyIdentification;
             temp.Owner = this;
             FormList.Add( temp );
             temp.Show();
         }
    }
    其中OnlyIdentification为你自己设定的窗体的唯一标识字符串并且在new窗体时把此字符串赋给formName属性。
     
         如果只是想使某一个窗体不被重复打开,那么可以使用一个static Form作唯一标识,请参见我的如何使MDI子窗体不重复被打开”
    里面“litongshun”的评论。
  • 相关阅读:
    使用RedisDesktopManager客户端无法连接Redis服务器问题解决办法
    centos7 安装postgresql11
    CentOS7安装MySQL(完整版)
    【Linux】CentOS7下安装JDK详细过程
    用FastDFS一步步搭建文件管理系统
    ELK教程3:logstash的部署、SpringBoot整合ELK+Filebeat
    ELK教程2:Kibana的安装
    ELK教程1:ElasticSearch集群的部署ELK
    设置侧边栏动态漫画
    Kubernetes中的workload(工作负载)
  • 原文地址:https://www.cnblogs.com/shf/p/806663.html
Copyright © 2020-2023  润新知