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#跨窗体操作


  • 相关阅读:
    Encryption (hard) CodeForces
    cf 1163D Mysterious Code (字符串, dp)
    AC日记——大整数的因子 openjudge 1.6 13
    AC日记——计算2的N次方 openjudge 1.6 12
    Ac日记——大整数减法 openjudge 1.6 11
    AC日记——大整数加法 openjudge 1.6 10
    AC日记——组合数问题 落谷 P2822 noip2016day2T1
    AC日记——向量点积计算 openjudge 1.6 09
    AC日记——石头剪刀布 openjudge 1.6 08
    AC日记——有趣的跳跃 openjudge 1.6 07
  • 原文地址:https://www.cnblogs.com/StupidsCat/p/2598993.html
Copyright © 2011-2022 走看看