zoukankan      html  css  js  c++  java
  • C# 委托实例(跨窗体操作控件)

     

    今天研究了一下,在C#里面却是可以不用自定义消息这么复杂的方法来实现跨窗体调用控件,C#有更好的办法就是委托。

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

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

    [csharp] view plaincopy
     
    1. public delegate void ChangeFormColor(bool topmost);  

    Form2类里

    [csharp] view plaincopy
     
    1. public event ChangeFormColor ChangeColor;  

    Form2的按钮事件中调用委托

    [csharp] view plaincopy
     
    1. private void button1_Click(object sender, EventArgs e)  
    2.         {  
    3.             ChangeColor(true);//执行委托实例  
    4.         }  


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

    [csharp] view plaincopy
     
    1. {  
    2.     Form2 f = new Form2();  
    3.     f.ChangeColor += new ChangeFormColor(f_ChangeColor);  
    4.     f.Show();  
    5. }  

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

    [csharp] view plaincopy
     
    1. void f_ChangeColor(bool topmost)  
    2.         {  
    3.             this.BackColor = Color.LightBlue;  
    4.             this.Text = "改变成功";  
    5.         }  



     三、完整代码

    [csharp] view plaincopy
     
    1. using System;  
    2. using System.Drawing;  
    3. using System.Windows.Forms;  
    4.   
    5. namespace 跨窗体调用控件  
    6. {  
    7.     public partial class Form1 : Form  
    8.     {  
    9.         public Form1()  
    10.         {  
    11.             InitializeComponent();  
    12.         }  
    13.         private void button1_Click(object sender, EventArgs e)  
    14.         {  
    15.             Form2 f = new Form2();  
    16.             f.ChangeColor += new ChangeFormColor(f_ChangeColor);  
    17.             f.Show();  
    18.         }  
    19.         void f_ChangeColor(bool topmost)  
    20.         {  
    21.             this.BackColor = Color.LightBlue;  
    22.             this.Text = "改变成功";  
    23.         }  
    24.     }  
    25. }  


     

    [csharp] view plaincopy
     
    1. using System;  
    2. using System.Windows.Forms;  
    3.   
    4. namespace 跨窗体调用控件  
    5. {  
    6.     public delegate void ChangeFormColor(bool topmost);  
    7.     public partial class Form2 : Form  
    8.     {  
    9.         public Form2()  
    10.         {  
    11.             InitializeComponent();  
    12.         }  
    13.         public event ChangeFormColor ChangeColor;  
    14.         private void button1_Click(object sender, EventArgs e)  
    15.         {  
    16.             ChangeColor(true);//执行委托实例  
    17.         }  
    18.     }  
    19. }  

    最后再给大家介绍一种最简单的C#跨窗体操作


  • 相关阅读:
    Spring源码分析(五)获取Document
    Spring源码分析(四)容器的基础XmlBeanFactory
    Spring源码分析(三)容器核心类
    Spring源码分析(二)容器基本用法
    day23 框架之基础加强
    Java web项目综合练习(Estore)
    第16 天 JavaWEB过滤器和监听器技术
    第17天 笔记 文件上传下载
    Javaweb 第15天 web练习和分页技术
    【剑指offer】数组中的逆序对,C++实现
  • 原文地址:https://www.cnblogs.com/fire909090/p/7929931.html
Copyright © 2011-2022 走看看