• 窗体之间传递值的几种方法


    窗体之间传递值的几种方法

    场景如下:

    我有一个mainFrm(父窗体), 一个subFrm(子窗体) 点击父窗体的按钮启动子窗体,点击子窗体的按钮可以给父窗体设置值。如下图

    第一种方法:启动子窗体,将整个窗体(this)传递过去。(不建议使用)

    步骤如下:

    1.在主窗体写一个函数SetText函数(这个地方也就是嵌入代码,你需要改那个窗体的内容,就在那个窗体写一个修改的函数。

     public void SetText(string msg) //这个地方SetText是公有的
            {
                this.textBox1.Text = msg;
            }

     2.在new 子窗体的时候加入参数this.

     private void button1_Click(object sender, EventArgs e)
            {          
                subFrm frm = new subFrm(this); //这个方法的核心就是传递this
                frm.Show();
            }

    3.给子窗体添加构造函数重载(子窗体持有一个mainFrm类的变量parentFrm)。

     public subFrm(mainFrm parentFrm):this()
            {
                this._parentFrm = parentFrm;
            }

    4.在子窗体的button事件上添加如下代码:

     private void button1_Click(object sender, EventArgs e)
            {
                string sendText = this.textBox1.Text;
               this._parentFrm.SetText(sendText);
    
            }

      

    第二种:使用委托

       步骤如下:

    1.在主窗体写一个函数SetText函数(这个地方也就是嵌入代码,你需要改那个窗体的内容,就在那个窗体写一个修改的函数。

     private void SetText(string msg)
            {
                this.textBox1.Text = msg;
            }

    2.在子窗体里面定义一个委托(算是委托类吧), public delegate void SendMsgDelegate(string msg); 这个定义要和主函数的SetText方法一致(返回值是void,参数是string)

     并且在定义一个委托(算是委托变量吧) public SendMsgDelegate sendMsg;用委托定义一个委托变量,这个委托变量只能接受返回值是void,参数是string的函数)。是类型安全的。

    3.在主窗体的按钮事件上new子窗体的时候加入如下代码

     private void button1_Click(object sender, EventArgs e)
            {
                subFrm frm = new subFrm(); //new一个子窗体
                frm.sendMsg = new SendMsgDelegate(SetText); 给那个子窗体的委托变量(sendMsg)赋值(主窗体的函数SetText)
                frm.Show();
            }

    4.在子窗体的按钮事件上加入如下代码

     private void button1_Click(object sender, EventArgs e)
            {
                string sendText = this.textBox1.Text; //读取自己窗体(子窗体)的textBox1的输入值
                if (sendMsg != null)//判断方法是否为空
                {
                    sendMsg(sendText);//调用方法
                }
    
            }

    df

     

  • 相关阅读:
    md测试
    安利好用的小工具及软件(常更新)
    08-无人值守自动批量安装系统(下)
    建立本地yum仓库
    如何知道命令是由哪个服务提供的
    08-无人值守自动批量安装系统(上)
    07-软件管理
    06-时间管理
    05-用户和组以及权限
    04-编辑文本
  • 原文地址:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_cs_0002.html
Copyright © 2020-2023  润新知