• C#-WinForm-★★★★★跨窗体 构造函数传值 及应用—登录式窗口传值、如何关闭主页面时关闭应用程序、如何打开唯一窗口★★★★★


    构造函数可以传任意类型的值,并可以同时传多个值

    结构函数传值的初步应用——简单的登陆式界面

    现在我有两个窗体Form3和Form4,如下,如何点击Form3中的按钮后,打开Form4并将Form3中的textbox中的值传给Form4的label?

    1、点击Form3中的按钮打开Form4    2、获取Form3中的值    3、传值给Form4中的label

    一、获取Form3中textbox1的值

    button1的点击事件:

    namespace 记事本
    {
        public partial class Form3 : Form
        {
            public Form3()
            {
                InitializeComponent();
            }
            //button1的点击事件
            private void button1_Click(object sender, EventArgs e)
            {
                string s = textBox1.Text;//获取Form3中textbox的值
    
                Form4 f4 = new Form4();//创建新的Form4
                f4.Show();//展示Form4
            }
        }
    获取Form3中button1的值,并打开Form4窗体

    二、通过构造函数传值 - 在新建Form4时将值传入,同时Form4的结构函数要接收相同类型的值,比如例子中传入string类型的值

    namespace 记事本
    {
        public partial class Form3 : Form
        {
            public Form3()
            {
                InitializeComponent();
            }
            //button1的点击事件
            private void button1_Click(object sender, EventArgs e)
            {
                string s = textBox1.Text;//获取Form3中textbox的值
    
                Form4 f4 = new Form4(s);//创建新的Form4,并将数据s传入
                f4.Show();//展示Form4
            }
        }
    }
    Form3 传值
    namespace 记事本
    {
        public partial class Form4 : Form
        {
            string str = null;//定义一个变量
    
            public Form4(string txt)
            {
                InitializeComponent();
    
                str = txt;//变量接收传入的值
            }
        }
    }
    Form4 接收传入的值

    三、将接收的值赋值给label1

    namespace 记事本
    {
        public partial class Form4 : Form
        {
            string str = null;//定义一个变量
    
            public Form4(string txt)
            {
                InitializeComponent();
    
                str = txt;//变量接收传入的值
                label1.Text = str;//赋值
            }
        }
    }
    赋值

    四、测试:

    =============================================================

    结构函数传值的初步应用——关闭应用程序

    如何关闭程序?比如说,系统启动时启动的是<启动页面Form3>,打开<主页面Form4>后,关闭Form4并不能关闭程序,而当关闭Form3时,程序才会关闭。

    可是当关闭<主页面Form4>时并不能关闭<启动页面Form3>,程序依然无法退出,此时该如何关闭程序呢?

    方法:将<启动页面Form3>窗体传入<主页面Form4>,此时Form4可以控制Form3行为,设置Form4关闭时,Form3同时关闭,即可实现应用程序关闭。

    将窗体传入?将窗体传入后,既可以实现在一个窗体中控制另一个窗体

    如何将窗体传入?(this - 代码所在的窗体)

     public partial class Form3 : Form
        {
            public Form3()
            {
                InitializeComponent();
            }
            //button1的点击事件
            private void button1_Click(object sender, EventArgs e)
            {
                Form4 f4 = new Form4(this);//创建新的Form4,并将窗体本身传入
                f4.Show();//展示Form4
            }
        }
    Form3 传值
    public partial class Form4 : Form
        {
            Form3 F3 = new Form3();//实例化一个Form3的变量
    
            public Form4(Form3 f3)//传入窗体
            {
                InitializeComponent();
    
                F3 = f3;//接收窗体
            }
        }
    From4 接收传值

    设置Form4关闭时Form3关闭

    public partial class Form4 : Form
        {
            Form3 F3 = new Form3();//实例化一个Form3的变量
    
            public Form4(Form3 f3)//传入窗体
            {
                InitializeComponent();
    
                F3 = f3;//接收窗体
            }
            //Form4关闭时
            private void Form4_FormClosing(object sender, FormClosingEventArgs e)
            {
                F3.Close();//Form3 窗体关闭指令
            }
        }
    设置Form4关闭时Form3关闭

    测试可以

    同理,如何在Form4打开时隐藏Form3?

    Form3 F3 = new Form3();//实例化一个Form3的变量
    
            public Form4(Form3 f3)//传入窗体
            {
                InitializeComponent();
    
                F3 = f3;//接收窗体
                F3.Visible = false;//Form3 窗体不显示
            }
    隐藏登入界面

    =============================================================

    结构函数传值的初步应用——打开唯一窗体

    在上面例子中,设置Form4在启动时From3不隐藏,且关闭Form4时不关闭Form3,你会发现,每次点击From3中按钮都会出现一个新的Form4

    如何实现打开唯一窗体?

    方法:在Form3中设置一个变量 public int count= 0(访问修饰符必须为public才可以跨窗体访问);判断 count 如果为0,则打开新的Form4,然后 count ++;如果 count 不为0,不打开新的Form4。

    如果关闭了Form4,此时Form3中的 count 仍不为0,再点按钮是打不开Form4的,也就是说只是实现了只打开一次Form4。

    如何实现在关闭Form4时将Form3中的 count 变为0?如果将 count 传入Form4,Form3是无法访问到Form4中的 count 的。

    将Form3传值进Form4,在Form4关闭时让 count 变为0

    public partial class Form3 : Form
        {
            public int count = 0;
            public Form3()
            {
                InitializeComponent();
            }
            //button1的点击事件
            private void button1_Click(object sender, EventArgs e)
            {
                if (count == 0)
                {
                    count++;
                    Form4 f4 = new Form4(this);//创建新的Form4,并将窗体本身传入
                    f4.Show();//展示Form4
                }
            }
        }
    Form3 代码
    public partial class Form4 : Form
        {
            Form3 F3 = new Form3();//实例化一个Form3的变量
            public Form4(Form3 f3)//传入窗体
            {
                InitializeComponent();
    
                F3 = f3;//接收窗体
            }
            //Form4关闭时
            private void Form4_FormClosing(object sender, FormClosingEventArgs e)
            {
                F3.count--;
            }
        }
    Form4 代码

    测试,即可实现打开唯一窗口

  • 相关阅读:
    前端优化
    Git基础使用
    【高可用架构】用Nginx实现负载均衡(三)
    【高可用架构】借助Envoy工具发布项目到多台服务器(二)
    【高可用架构】开发机上部署Deploy项目(一)
    【Linux系列】Centos7安装Samba并将工作区挂载到win(八)
    【Linux系列】Centos 7部署Laravel项目(七)
    【Linux系列】Centos 7安装 Redis(六)
    【Linux系列】Centos 7安装 Mysql8.0(五)
    gitlab服务器搭建
  • 原文地址:https://www.cnblogs.com/qq450867541/p/6161096.html
Copyright © 2020-2023  润新知