winform弹出唯一的窗体

Posted 斐雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        List<Form> allform = new List<Form>();
        //跳转到form2界面,把值传过去
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2(this,textBox1.Text);//实例化,把值传到form2
            f2.Name = "f2";//重新给form2的name赋值,免除发生冲突
            onlyone(f2);
        }
        //私有,保证弹出窗口是唯一的方法
        private void onlyone(Form FF)
        {
            bool hasform = false;

            foreach (Form f in allform)
            {
                if (f.Name == FF.Name)
                {
                    hasform = true;
                    f.WindowState = FormWindowState.Normal;
                    f.Focus();
                }
            }
            if (hasform)
            {
                FF.Close();
            }
            else
            {
                allform.Add(FF);
                FF.Show();
            }
        }
        //跳转到form3界面,把值传过去
        private void button2_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3();
            f3.Name = "f3";
            onlyone(f3);
        }

        //弹窗关闭后,要在集合中移除,避免关闭后无法再次弹出
        public void removeform(Form ff)
        {
            allform.Remove(ff);
        }
    }
}

f弹出窗口form2的后台代码

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 Form2 : Form
    {
        Form1 F1 = null;
        public Form2(Form1 f1,string uname)
        {
            InitializeComponent();
            F1 = f1;
            //显示用户名
            label1.Text = uname;
        }

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            F1.removeform(this);
        }
    }
}

以上是关于winform弹出唯一的窗体的主要内容,如果未能解决你的问题,请参考以下文章

winform窗体点击删除按钮如何弹出确认删除对话框?

winform窗体点击删除按钮,如何弹出确认删除对话框?

winform点按钮弹出一个窗体,然后上一个窗体关闭,怎么实现?

c#WinForm窗体限制只能打开一次

有关于winform的 点击主窗体的按钮隐藏子窗体?

Winform中动态绑定menuStript菜单数据,点击菜单弹出窗体,关联数据表,窗体显示在容器中?