美文网首页C#学习
C#使用委托在窗体间传值

C#使用委托在窗体间传值

作者: 幻凌风 | 来源:发表于2017-07-26 00:16 被阅读653次

任务:在窗体1点击按钮显示窗体2,在窗体2点击按钮将该窗体TextBox的值传递给窗体1的Label


窗体1.jpg
窗体2.jpg
传值.jpg

直接看代码(窗体1的代码)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FormSendValueToForm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //将Form2传递过来的值赋值给LabelOne
        public void ShowText(string str)
        {
            labelOne.Text = str;
        }

        private void buttonOne_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2(ShowText);
            form2.ShowDialog();
        }
    }
}

窗体2的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FormSendValueToForm
{
    //与窗体1的ShowText方法签名相同的委托类型
    public delegate void DelSendValue(string str);
    public partial class Form2 : Form
    {
        //委托类型字段,存储Form1传送过来的函数
        private DelSendValue delMethod;
        public Form2(DelSendValue del)
        {
            this.delMethod = del;
            InitializeComponent();
        }
        //通过委托传值给窗体1,实际上运行的是窗体1的ShowText方法
        private void buttonTwo_Click(object sender, EventArgs e)
        {
            this.delMethod(textBoxTwo.Text);
        }
    }
}

窗体1点击按钮显示窗体2,在窗体1创建一个ShowText方法(返回值为Void,参数为String)用于给Label赋值。
窗体2声明一个委托类型,以及该委托类型的字段,用于存储窗体1传递过来的函数。
点击窗体2的按钮将TextBox的值传递给窗体1的Label,实际上运行的是窗体1的ShowText方法。

简言之:

窗体1说:我有妹子(方法),你有酒(值)。但是我没有办法直接用你窗体2的酒,你也没有办法用我的妹子(方法),既然这样的话,你窗体2先找个咱俩都信得过的中间人(声明一个委托),我的妹子和你中间人联系(方法和你委托签名一致),咱们两个合作一下。可是你窗体2不要随便出来,我告诉你啥时候可以露面了你再出来(窗体2要显示还得通过我窗体1的按钮点击才可以)。如果你窗体2觉得我窗体1靠谱的话,你出来的时候我就把我的妹子带上亲自交到你手中(我窗体1把自己的方法通过窗体2的构造函数给你传过去),妹子平常都是我自己享用的(这个函数平常是我窗体1自己用来给自己的Label赋值的),你窗体2可得好生照顾啊(窗体2暂时在构造函数里面先用你的委托字段把我的方法保存好)。

窗体2说:你好,窗体1,你的妹子已经来到我这儿了(窗体1发过来的方法我已经通过我的构造函数保存好了)。今天玩的很高兴!为了表达我的诚意,妹子回去的时候,我窗体2已经发信息告诉让咱俩的中间人给妹子怀里塞了一瓶我珍藏多年的好酒,请接收!(窗体2在按钮点击事件里面调用了委托,委托里面有你窗体1的方法,所以我窗体2把我的TextBox里面的值通过该委托给你传递过去了!实在不好意思哈,为了给你带酒,也只好委屈妹子了(为了给你窗体1传值,我间接的调用了你窗体1的ShowText方法)!

窗体1:OK,我已经收到 了你窗体2的美酒,感谢!(窗体1收到窗体2传过来的值了)!合作愉快!

相关文章

  • C#使用委托在窗体间传值

    任务:在窗体1点击按钮显示窗体2,在窗体2点击按钮将该窗体TextBox的值传递给窗体1的Label 直接看代码(...

  • C#窗体间常用的几种传值方式、以及委托与事件的详细介绍

    窗体间的传值,最好使用委托方式传值,开始之前,我们先来说一下委托与事件的关系。 委托:是一个类。 事件:是委托类型...

  • winform窗体间传值

    推荐使用第6与第7方法 1.通过构造函数 特点:传值是单向的(不可以互相传值),实现简单 实现代码如下: 在窗体F...

  • C#窗体实时传值

    1、功能展示 有时需要将子界面的内容传递到父界面,方法有好几种。经常用的是通过委托实现。具体的效果如下: 【说明】...

  • C#窗体之间传值

    一、接口实现窗体之间传值 1、定义接口IMessageOn 2、定义子窗体FormA、FormB、FormC (1...

  • C#窗体传值方法总结

    窗体传值是在学习窗体应用程序时碰到的一类比较常见的问题,现将窗体传值方法做了一点总结,方法如下: <1>声明全局变...

  • C#图形文字打印预览的实例

    一、C#窗体打印组件 Windows 窗体中的打印主要包括: 使用PrintDocument 组件来使用户能够打印...

  • 在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体

    在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体 ShowAllPagesAllPage = new Sh...

  • 2017-08-05学习日迹

    C#委托基本使用 1,声明委托(相当于中介)(定义一个函数的原型:返回值+参数类型和个数) public dele...

  • 线程。回值

    控制器传值属性传值回传值委托代理: 把发送数据的类做成委托类:声明协议,在协议中声明一些方法,给委托类定义一个ID...

网友评论

    本文标题:C#使用委托在窗体间传值

    本文链接:https://www.haomeiwen.com/subject/wjtnkxtx.html