委托的使用实例
来源:互联网 发布:九本满防防御数据 编辑:程序博客网 时间: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);//执行委托实例
}
}
}
解决:用事件回调
一、在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);//执行委托实例
}
}
}
- 委托的使用实例
- 委托的使用全面剖析(委托好处,为什么要用委托,委托实例精解)
- 委托的使用全面剖析(委托好处,为什么要用委托,委托实例精解)
- 委托的声明与实例化使用
- c# 委托的定义及使用实例
- 简单的委托实例
- 委托的定义_委托的实例
- ASP.NET中"委托"(delegate)的使用简单实例
- 委托机制在线程中的使用的简单实例
- 委托 一个最基本的委托实例
- C#委托-委托的使用
- [Unity&C#&委托事件&未实例化]使用委托事件的时候事件对象未实例化
- 有实用功能的委托实例
- 两个关于委托的实例
- delegate--- 委托简单的实例
- 第一次写的委托实例
- .NET-简单的委托实例
- 委托的使用情况
- Sharepoint2010-常用方法技巧总结
- [Silverlight学习记录]Resources-1
- Ext.form.ComboBox最常用的一些属性和方法
- 异常来自 HRESULT:0x80040E14
- objective C中的@class, SEL , IMP等灵活机制(五)
- 委托的使用实例
- Android 编程规范
- windows线程池
- 编译OpenCV for arm-linux
- 傲慢与偏见
- Compile Clang on Fedora15
- Android Http get post请求
- 做好软件项目设计四步法
- linux系统中运行hello world