委托的使用实例

来源:互联网 发布:九本满防防御数据 编辑:程序博客网 时间:2024/05/12 06:26
问题:有两个窗体,FORM1(含一个label控件,一个名为“显示form2“的button控件)和FORM2(含一个button控件)。启动时,FORM1中点击button控件“显示form2”使FORM2显示出来。点击FORM2中的button1后,Form1中的label1的text改变。

解决:用事件回调

一、在Form2里面:
首先声明一个委托和委托实例
public delegate void SetMainFormTopMostHandle(bool topmost); 
public SetMainFormTopMostHandle SetMainFormTopMost;

二、在Form1里面:
button控件“显示form2“的click事件中有下面的代码:

    Form2 f2 = new Form2 (); 
    f2.Show()
}

然后在f2.Show()之前,加一句:
f2.SetMainFormTopMost += new SetMainFormTopMostHandl(f2_SetMainFormTopMost);   
用来给form1中的SetMainFormTopMost注册一个修改label控件内容的方法f2_SetMainFormTopMost()
提示:
f2.SetMainFormTopMost += new SetMainFormTopMostHandle(f2_SetMainFormTopMost); 
这句最关键,你输入到+=之后,按两下Tab,他会自动给你生成回调函数

如下:
void f2_SetMainFormTopMost(bool topmost)
{
    label1.Text = "调用成功";//改变label内容的代码
}
这里面f2_SetMainFormTopMost就是你用来修改label的方法(回调函数)。 
SetMainFormTopMostHandle、SetMainFormTopMost分别是定义的委托和委托实例名称,自己可以随便定义。 
大致就是为f2创建一个用来修改label的方法,然后把该方法绑定到这个委托实例上。

三、启动f2,在f2中执行这个委托实例,就是SetMainFormTopMost(true)这样写 (参数要和委托的那个声明一 致) 
那么就会调用F1中绑定的那个方法。

源代码如下:
Form1中的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 跨窗体调用控件

    public partial class Form1 : Form
    { 
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
           
        }

        void f2_SetMainFormTopMost(bool topmost) //回调函数
        {
            label1.Text = "调用成功";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            //给form2中的委托实例SetMainFormTopMost 注册方法
            f2.SetMainFormTopMost += new SetMainFormTopMostHandle(f2_SetMainFormTopMost);
            f2.Show();
        }
    }
}

Form2中的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 跨窗体调用控件
{
    public delegate void SetMainFormTopMostHandle(bool topmost); //定义委托
    public partial class Form2 : Form
    {
        public SetMainFormTopMostHandle SetMainFormTopMost;//定义委托实例
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SetMainFormTopMost(true);//执行委托实例
        }
    }
}
原创粉丝点击