zoukankan      html  css  js  c++  java
  • 窗体间传值(委托)

      窗体间的传值很常用(还记得当时困扰了我好久。。。),有几种方式都可以实现,这里采用委托的方式。

    1.首先,建好两个窗体,想要的效果如下。

    2.看看里面的代码

    2.1 Form1的代码

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Windows.Forms;
     9 
    10 namespace 窗体传值_委托_
    11 {
    12     //设置给 文本框赋值方法 的委托
    13     public delegate void setTextBox1ValueDel(string str);
    14 
    15     public partial class Form1 : Form
    16     {
    17         public Form1()
    18         {
    19             InitializeComponent();
    20         }
    21 
    22         //设置文本框的text
    23         private void SetTextBox1Value(string str)
    24         {
    25             this.textBox1.Text = str;
    26         }
    27 
    28         //打开Form2
    29         private void btnOpenForm2_Click(object sender, EventArgs e)
    30         {
    31             Form2 frm = new Form2(SetTextBox1Value);
    32             frm.ShowDialog();
    33         }
    34     }
    35 }

    2.2 Form2 的代码

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Windows.Forms;
     9 
    10 namespace 窗体传值_委托_
    11 {
    12     public partial class Form2 : Form
    13     {
    14 
    15         // 文本框赋值方法 的委托属性
    16         private setTextBox1ValueDel _setTextBox1ValueDel;
    17 
    18         public Form2(setTextBox1ValueDel del )
    19         {
    20             InitializeComponent();
    21             this._setTextBox1ValueDel = del;
    22         }
    23 
    24         //发送
    25         private void btnSend_Click(object sender, EventArgs e)
    26         {
    27             _setTextBox1ValueDel(this.textBox1.Text);
    28         }
    29     }
    30 }

    3.到这里,问题已经解决了,可以关闭这个页面了。如果你没有成功,请看下面。

    3.1委托

    使用委托一共分三步:

    1.定义

    1.1看好了,setTextBox1ValueDel 直接定义在了命名空间下,而不是在某个类的下面。它代表的是一个方法的类型。

    这个方法,没有返回值,参数是一个string类型。

    1.1.1 为什么这么定义呢,是根据我想要被调用的方法决定的。被调用的方法是没有返回值的,只有一个string参数。

    2.实例化

    2.1 我在Form2的窗体里定义了一个setTextBox1ValueDel 类型的属性。

     

    2.2 setTextBox1ValueDel 委托有了,但它自己并不知道自己是哪一个方法的委托(我还是觉得用“代理”这个词更好理解,某些语言中“委托”被称作“代理”)。

    所以有了下面的代码:

    2.2.1将方法名传递给Form2

    2.2.2 Form2中的代理初始化

    3.调用

    3.1 现在可以调用了,传入的是string

     

    4.我这么啰嗦的,写的这么详细,只是为了使用委托进行窗体间的值的传递吗?

    4.1 线程

     我是在线程的使用中才了解委托的,下一篇我将介绍在线程中的使用。

    。。。。。其实,线程中使用和这里一样,我不过是想引出其它的知识点。

    4.2 事件

    我只知道,事件其实就是委托的一种形式。以后会自学下事件,然后再来分项。

    4.3 其它的我不知道的使用场景

  • 相关阅读:
    using 资源清理
    Http Module 介绍[转]
    一个类似CSDN的frameset框架
    vs.net2003的一个老问题“你试图打开的项目是Web项目,请指定URL路径”解决办法
    Oracle和SQL Server实现跨库查询
    Http 请求处理流程[转]
    Http Handler 介绍[转]
    asp.net后台控制div style
    sharepoint站点Feature的定制与开发
    为列表类型绑定Event Receiver
  • 原文地址:https://www.cnblogs.com/Cui-Shi-Yu/p/5737813.html
Copyright © 2011-2022 走看看