zoukankan      html  css  js  c++  java
  • 窗体之间传递值的几种方法

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

    场景如下:

    我有一个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

     

  • 相关阅读:
    多线程的几种实现方法详解
    Java线程编程中isAlive()和join()的使用详解
    MyEclipse在不同编辑面间快速切换
    MyEclipse中设置代码块快捷键
    MyEclipse设置文件编码
    Oracle安装后遇到错误:The Network Adapter could not establish the connection
    Java中的Runtime类
    Java中接口的特点
    Java中三种常见的注释(注解) Annotation
    Java中的泛型
  • 原文地址:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_cs_0002.html
Copyright © 2011-2022 走看看