winform弹出唯一窗体的方法

Form1中btn1按钮点击show出Form2,当Form2处于开启状态时,再次点击btn1不会继续弹出窗体,而是将焦点定位至已开启的Form2上;
当Form2关闭后,再次点击btn1则会show出一个新的Form2;

Form1:

    //创建一个全局集合,用来放置已经show出的窗体对象
    List<Form> list = new List<Form>();

    //btn1点击事件:
    private void button1_Click(object sender, EventArgs e)
    {
        bool hasForm = false; //判断窗体是否已经弹出
        Form2 f2 = new Form2(); //实例化一个弹出窗体对象
        f2.Owner = this;     //将弹出对象的拥有者设置为当前窗体

        if (list.Count > 0) //如果集合中有元素
        {
            foreach (Form f in list) //遍历它们
            {
                if (f.Name == f2.Name) //如果要弹出的窗体对象已经存在
                {
                    hasForm = true; //表示已经弹出
                    f.Focus();     //焦点定位已经弹出的窗口
                }
            }
        }

        if (hasForm) //当前已经有窗口弹出
        {
            f2.Close(); //把新实例化的窗体对象给释放掉
        }
        else //如果没有窗口弹出
        {
            list.Add(f2);  //将新窗体添加进集合
            f2.Show();  //弹出窗体
        }
    }

此时窗体已经可以弹出唯一了,但是当窗体关闭后就无法再次弹出了;
此时需要在Form1中写一个方法,并且在弹出窗口的FormClosing事件中调用这个方法;

  //Form1中的方法:
    public void _Remove(Form f)
    {
        if (list.Contains(f))
        {
            list.Remove(f);
        }
    }

    //弹出窗口Form2中调用:
    private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (this.Owner is Form1)
        {
            (this.Owner as Form1)._Remove(this);
        }
    }
时间: 2024-12-17 09:09:34

winform弹出唯一窗体的方法的相关文章

winform弹出唯一的窗体

主入口窗体的后台代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace winform唯一弹窗 { public partial class Form1 : Fo

MDI弹出唯一窗体

1 /// <summary> 2 /// 点击开启学生窗体 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void pictureBox6_Click(object sender, EventArgs e) 7 { 8 bool Has = false;

关闭主进程和弹出唯一窗体

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication8 { public partial class Form1 :

弹出唯一窗口

一.MDI窗体弹出唯一窗体 private void button1_Click(object sender, EventArgs e) { //设置一个bool变量,用来标记是否有已打开的重名窗口 bool has = false; Form1 form1 = new Form1(); //遍历mdi子窗口 foreach (Form form in MdiChildren) { //判断是否重名 if (form.Name == form1.Name) { //重名时has为true: ha

WPF的WebBrowser屏蔽弹出脚本错误窗体

WPF自带的WebBrowser在訪问一些有问题的网页时常常跳出非常多提示脚本错误的窗体, 可是WPF没有自带屏蔽这些窗体的方法或属性. 所以网上找来一使用反射的方法来屏蔽弹出脚本错误窗体的方法, 非常管用. 代码例如以下: public void SuppressScriptErrors(WebBrowser wb, bool Hide) { FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2&quo

【2017-05-02】winform弹出警告框是否进行增删改操作、记事本制作、对话框控件和输出输入流

一.winform弹出警告框是否进行增删改操作 第一个参数是弹出窗体显示的内容,第二个参数是标题,第三个参数是该弹窗包含确定和取消按钮. 返回的是一个枚举类接收一下. 再进行判断,如果点的是确定按钮,再进行下一步的增删改操作. 二.记事本的制作 1.菜单工具栏MenuStrip-插入标准项 2.TextBox -显示部分 小箭头 MultiLine 选中多行 Dock属性占满. 3.功能 - 撤销 - 剪切 - 粘贴 - 复制 - 删除 - 全选 - 时间 - 查找 单独做一个窗体点击打开 把主

WPF 在MVVM模式下弹出子窗体的方式

主要是通过一个WindowManager管理类,在window后台代码中通过WindowManager注册需要弹出的窗体类型,在ViewModel通过WindowManager的Show方法,显示出来. WindowManager代码如下: public static class WindowManager { private static Hashtable _RegisterWindow = new Hashtable(); public static void Regiter<T>(st

[转]js中confirm实现执行操作前弹出确认框的方法

原文地址:http://www.jb51.net/article/56986.htm 本文实例讲述了js中confirm实现执行操作前弹出确认框的方法.分享给大家供大家参考.具体实现方法如下: 现在在删除或其它操作前弹出确定提示,我们有很多方法,最基本的就是利用js自带的函数confirm来操作了 最简单的用法如下: 鼠标事件使用confirm 复制代码 代码如下: <a href="#" onclick= "if(confirm( '是否确定! ')==false)r

[King.yue]Ext.net 弹出Windows窗体注意的事项

页面的控件ID不能重复,否则会覆盖原控件. [King.yue]Ext.net 弹出Windows窗体注意的事项,布布扣,bubuko.com