小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 9463|回复: 8

C# 委托实例(跨窗体操作控件与调用函数)

[复制链接]
发表于 2012-4-15 16:59:22 | 显示全部楼层 |阅读模式
C#里面可以不用自定义消息这么复杂的方法来实现跨窗体调用控件,C#有更好的办法就是委托。效果描述:有两个窗体,FORM1(一个名为“打开form2”的button控件)和FORM2(一个名为“改变form1颜色“的button控件)。启动时,FORM1中点击button控件“打开form2””使FORM2显示出来。点击FORM2中的“改变form1颜色”后,Form1中颜色改变。
一、在Form2里面:
       首先声明一个委托和委托实例
Form2类外
  • public delegate void ChangeFormColor(bool topmost);  

public delegate void ChangeFormColor(bool topmost); Form2类里


  • public event ChangeFormColor ChangeColor;  

public event ChangeFormColor ChangeColor; Form2的按钮事件中调用委托
  • private void button1_Click(object sender, EventArgs e)  
  •         {  
  •             ChangeColor(true);//执行委托实例   
  •         }  

private void button1_Click(object sender, EventArgs e)        {            ChangeColor(true);//执行委托实例        }
二、在Form1里面:
button控件“打开form2“的click事件中有下面的代码:


  • {  
  •     Form2 f = new Form2();  
  •     f.ChangeColor += new ChangeFormColor(f_ChangeColor);  
  •     f.Show();  
  • }  

        {            Form2 f = new Form2();            f.ChangeColor += new ChangeFormColor(f_ChangeColor);            f.Show();        } f.ChangeColor += new ChangeFormColor(f_ChangeColor);
这句最关键,你输入到+=之后,按两下Tab,他会自动给你生成回调函数,如下:


  • void f_ChangeColor(bool topmost)  
  •         {  
  •             this.BackColor = Color.LightBlue;  
  •             this.Text = "改变成功";  
  •         }  

void f_ChangeColor(bool topmost)        {            this.BackColor = Color.LightBlue;            this.Text = "改变成功";        }

三、完整代码


  • using System;  
  • using System.Drawing;  
  • using System.Windows.Forms;  
  •   
  • namespace 跨窗体调用控件  
  • {  
  •     public partial class Form1 : Form  
  •     {  
  •         public Form1()  
  •         {  
  •             InitializeComponent();  
  •         }  
  •         private void button1_Click(object sender, EventArgs e)  
  •         {  
  •             Form2 f = new Form2();  
  •             f.ChangeColor += new ChangeFormColor(f_ChangeColor);  
  •             f.Show();  
  •         }  
  •         void f_ChangeColor(bool topmost)  
  •         {  
  •             this.BackColor = Color.LightBlue;  
  •             this.Text = "改变成功";  
  •         }  
  •     }  
  • }  

using System;using System.Drawing;using System.Windows.Forms;namespace 跨窗体调用控件{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void button1_Click(object sender, EventArgs e)        {            Form2 f = new Form2();            f.ChangeColor += new ChangeFormColor(f_ChangeColor);            f.Show();        }        void f_ChangeColor(bool topmost)        {            this.BackColor = Color.LightBlue;            this.Text = "改变成功";        }    }}


  • using System;  
  • using System.Windows.Forms;  
  •   
  • namespace 跨窗体调用控件  
  • {  
  •     public delegate void ChangeFormColor(bool topmost);  
  •     public partial class Form2 : Form  
  •     {  
  •         public Form2()  
  •         {  
  •             InitializeComponent();  
  •         }  
  •         public event ChangeFormColor ChangeColor;  
  •         private void button1_Click(object sender, EventArgs e)  
  •         {  
  •             ChangeColor(true);//执行委托实例   
  •         }  
  •     }  
  • }

回复

使用道具 举报

发表于 2012-4-15 22:29:57 | 显示全部楼层
额,看不懂啊
回复 支持 反对

使用道具 举报

发表于 2012-4-15 22:30:24 | 显示全部楼层
额,看不懂啊
回复 支持 反对

使用道具 举报

发表于 2012-9-8 21:17:27 | 显示全部楼层
hehe ,youdexuexile
回复 支持 反对

使用道具 举报

发表于 2012-10-4 18:02:14 | 显示全部楼层
刚学C语言   看起半知半懂。。。
回复 支持 反对

使用道具 举报

发表于 2012-10-4 21:00:08 | 显示全部楼层
哈哈   老大开始教大家C#了?    我觉得教java好一点哇:)
回复 支持 反对

使用道具 举报

发表于 2013-6-9 09:25:20 | 显示全部楼层
呵呵,这么专业的帖子,应该贴到c#论坛才够味道
回复 支持 反对

使用道具 举报

发表于 2013-7-23 00:46:03 | 显示全部楼层
呵呵,讲解编程方法很有必要,感谢分享
回复 支持 反对

使用道具 举报

发表于 2016-10-6 11:21:27 | 显示全部楼层
谢谢楼主,好贴
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-4-20 17:02 , Processed in 1.081532 second(s), 18 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表