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. }  

     

  • 相关阅读:
    爬虫--urllib,requests模块
    ADO.NET实用经验汇总
    MVC框架的优点-老外的原文翻译
    ASP.NET MVC 3: Razor的@:和语法
    html做表格只显示表格的外边框
    ASP.NET 页生命周期概述
    Asp.Net母版页元素ID不一致的体现
    Asp.Net套用母版页后元素ID不一致之个人总结
    ASP.NET 4.0配置文件中的ClientIDMode属性
    Asp.Net母版页和内容页运行机制
  • 原文地址:https://www.cnblogs.com/shijiewutonghua/p/2980421.html
Copyright © 2011-2022 走看看