`
lovnet
  • 浏览: 6719447 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

如何使窗体不重复被打开

阅读更多
如何使窗体不重复被打开
要使窗体不被重复打开,就要把已经打开的窗体保存下来进行轮寻,我们可以用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”的评论。
分享到:
评论

相关推荐

    C#WinForm案例_父MDI窗体不重复打开子窗体

    附件中包含一个C#WinForm中父MDI窗体不重复打开子窗体的案例,父窗体在打开子窗体之前先判断子窗体是否存在,若存在则激活;若不存在,实例化并打开子窗体。开发环境:VS2012。

    c# 防止 打开 重复子窗体

    //子窗体不存在,打开子窗体 if (cwExists == false) { parentWindow.IsMdiContainer = true; childrenWindow.MdiParent = parentWindow; childrenWindow.WindowState = System.Windows.Forms.FormWindowState...

    打开新窗体,新窗体已经打开的情况下点击按钮不重复打开

    点击按钮打开新窗体,新窗体被打开后,再点击按钮,不重复打开新窗体,关闭窗体,点击按钮,才能打开新窗体,用C#编的,winfrom,测试好用。

    winfrom窗体实现置顶显示,通过按钮把指定窗口置顶显示,窗体不重复显示

    主要针对同时打开多个窗体时,再按一遍父窗体的按钮,能够把指定的&非置顶&已打开的窗体置顶,提高软件易用性,窗体不重复打开,

    子窗体架构

    适合初学者的VB.NET子窗体初始架构。 有菜单切换、 子窗体显示在主窗体内并最大化; TabControl 归纳子窗体,双击标签关闭对应窗体; 重复打开提醒。

    ASP.NET工厂模式三层架构增删改查分页源码

    本软件是一个工厂模式三层架构... 5、提供窗体单列模式功能,即某窗体只能实例化1次,不能将某个窗体重复打开为多个窗体。 6、提供将BLL层实例静态化,即程序对BLL层进行一次实例化进行使用,不需要在每次使用时实例

    VB net 模拟考试系统 SQLSERVER版.rar

    你必须正确输入你所在班级、姓名和学号,交卷后...本考试系统的窗口只允许打开一个,程序会判断窗体是否已经打开,如果已经打开,则不需要重复打开,只是显示。  程序正常运行需要SQL数据库,请在测试前附加并连接好。

    VBA常用技巧

    技巧37使用高级筛选获得不重复记录91 技巧38工作表的保护与解除保护92 技巧39奇偶页打印95 第3章Wordbook(工作簿)对象97 技巧40工作簿的引用方法97 40-1使用工作簿的名称97 40-2使用工作簿的索引号97 40-3使用...

    软件界面设计工具_3款合集

    此时,你可以选择打开窗体、打开网页、弹出对话框、修改属性值和关闭本身窗体等五种效果,这里我们选择“打开窗体”,然后在弹出的对话框里指向弹出窗体的文件。最后,点击“完成”按钮即可。 图八、使用UI...

    采集终端后台(新国网规约Q/GDW 376-2013)V3.0.35.zip

    快捷键: F1:打开【通讯方式】 F2:打开【报文配置】 F3:清除窗体信息 F4:重复发送上次报文 F5:打开/关闭串口 F6:打开【自动校表】 F7:打开【手动校表】 F9:查询终端版本【测试通道】 F12:打开【生产调试】

    ERP5.0电子报表设计文档

    3) 打开报表,将弹出报表选择窗体,供用户选择需要打开哪一个系统编码的哪种模板类型的哪一张报表,选择确认后,将打开报表形成一个编辑窗体。 【界面及使用说明】 1)。选择报表,打开如下窗体。 选择系统编码...

    如何设置让一个窗口总在最前(Exaware OnTop和PushPin)

    这时打开该窗口,再打开其他程序窗口,看看它是否一直总在其他窗口的前面而不被遮住?怎么样,是不是有种高高在上的感觉?要想取消 OnTop 状态,只要重复一遍上面的操作就可以了。 看到这里你是不是有一个疑问:...

    uCGUIBulider3.1 ucGUI可视化编程工具

    1、修改了选择不同窗体属性窗口不更新的BUG; 2、修改了只能打开一个ucGUIBuilder的功能,现在可以同时启动多个; 3、修复了拖放非ucfrm引起软件错误的Bug; 4、添加了控件ID自动增加功能; 5、添加了控件ID检查功能...

    Excel VBA实用技巧大全 附书源码

    02032在不更新链接的情况下打开工作簿 02033新建工作簿,并以新名称保存 02034保护工作簿 02035撤销工作簿保护 02036保存工作簿 02037另存工作簿 02038设定保护密码并另存工作簿 02039设定写保护密码并另存工作簿 ...

    VBA编程技巧大全

    技巧37 使用高级筛选获得不重复记录 93 技巧38 工作表的保护与解除保护 94 技巧39 奇偶页打印 97 第3章 Wordbook(工作簿)对象 99 技巧40 工作簿的引用方法 99 40-1 使用工作簿的名称 99 40-2 使用工作簿的索引号 ...

    C#照片抽奖程序V2

    应朋友的要求,对之前的照片抽奖程序做了优化,本程序可以作为公司年会抽奖工具直接使用,代码可在VS2013中直接打开。 将bin\Debug\ImageAward.exe和Images、AwardedImages、BackMusic文件夹直接复制出来使用。 使用...

Global site tag (gtag.js) - Google Analytics