winform 关闭主程序,弹出唯一窗口

本文介绍了一个使用C#编写的窗体程序设计案例,包括主窗体验证登录信息后切换到第二个窗体,并实现关闭主窗体的功能;第二个窗体在加载和关闭时触发相应事件,且能创建唯一实例的第三个窗体。
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 关闭主程序_弹出唯一窗口
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "zhangsan" && textBox2.Text == "123")
            {
                Form2 f2 = new Form2(this);
                f2.Show();
                this.Hide();
            }
            else
            {
                MessageBox.Show("输入有误");
            }
        }
    }
}
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 关闭主程序_弹出唯一窗口
{
    public partial class Form2 : Form
    {
        Form1 F1 = null;
        public Form2(Form1 f1)
        {
            InitializeComponent();
            F1 = f1;
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }

        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            F1.Close();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        List<Form> list = new List<Form>();
        private void button1_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3(this);
            bool hasForm = false;
            foreach (Form f in list)
            {
                if (f.Name == f3.Name)//说明已经有这个窗体存在
                {
                    hasForm = true;//记录一下这个窗体已经存在的
                    f.WindowState = FormWindowState.Normal;
                    f.Show();
                    f.Activate();//激活并赋予焦点
                    //f.Focus();//焦点进入,把焦点定位在已经存在的窗体上
                    
                    f3.Close();//把新new出来的窗体关闭。
                }
            }
            if (hasForm==false)//如果没有打开,就重新打开。
            {
                f3.Show();
                list.Add(f3);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
                  Form3 f4 = new Form3(this);
            bool hasForm = false;
            foreach (Form f in list)
            {
                if (f.Name == f4.Name)//说明已经有这个窗体存在
                {
                    hasForm = true;//记录一下这个窗体已经存在的
                    f.WindowState = FormWindowState.Normal;
                    f.Show();
                    f.Activate();//激活并赋予焦点
                    //f.Focus();//焦点进入,把焦点定位在已经存在的窗体上
                    
                    f4.Close();//把新new出来的窗体关闭。
                }
            }
            if (hasForm==false)//如果没有打开,就重新打开。
            {
                f4.Show();
                list.Add(f4);
            }
        }

        public void DeleteF3(Form3 f3)
        {
            List<Form> aa = new List<Form>();

            foreach (Form f in list)
            {
                if (f.Name != f3.Name)
                {
                    aa.Add(f);
                }
            }
            list = aa;
        }
    }
}
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 关闭主程序_弹出唯一窗口
{
    public partial class Form3 : Form
    {
        Form2 F2 = null;
        public Form3(Form2 f2)
        {
            InitializeComponent();
            F2 = f2;
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void Form3_FormClosing(object sender, FormClosingEventArgs e)
        {
            F2.DeleteF3(this);

        }
    }
}

 

转载于:https://www.cnblogs.com/zhangdemin/p/5640757.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值