欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 委托(跨窗体操作控件)实例流程讲解

程序员文章站 2023-12-10 17:36:16
效果描述:有两个窗体,form1(一个名为“打开form2”的button控件)和form2(一个名为“改变form1颜色“的button控件)。启动时,form1中点击b...

效果描述:有两个窗体,form1(一个名为“打开form2”的button控件)和form2(一个名为“改变form1颜色“的button控件)。启动时,form1中点击button控件“打开form2””使form2显示出来。点击form2中的“改变form1颜色”后,form1中颜色改变。

一、在form2里面:
       首先声明一个委托和委托实例
form2类外

复制代码 代码如下:

public delegate void changeformcolor(bool topmost);

form2类里

复制代码 代码如下:

01.public event changeformcolor changecolor; 

form2的按钮事件中调用委托

复制代码 代码如下:

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(); 
}

f.changecolor += new changeformcolor(f_changecolor);
这句最关键,你输入到+=之后,按两下tab,他会自动给你生成回调函数,如下:

复制代码 代码如下:

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);//执行委托实例 
        } 
    } 
}