• C#跨窗体调用控件(委托回调函数使用例子)


    问题: 有两个窗体,FORM1(含一个label控件,一个名为显示form2的button控件)和FORM2(含一个button控件)。启动时,FORM1中点击button控件显示form2使FORM2显示出来。点击FORM2中的button1后,Form1中的label1的text改变。 解决:用事件回调 一、在Form2

    解决:用事件回调

    一、在Form2里面:
           首先声明一个委托和委托实例
           public delegate void SetMainFormTopMostHandle(bool topmost);
           public event SetMainFormTopMostHandle SetMainFormTopMost;

    二、在Form1里面:
            button控件“显示form2“的click事件中有下面的代码:
            {
                Form2 f2 = new Form2 ();
                f2.Show()
            }
           然后在f2.Show()之前,加一句:
             f2.SetMainFormTopMost += new SetMainFormTopMostHandl(f2_SetMainFormTopMost);  用来给form1中的SetMainFormTopMost注册一个修改label控件内容的方法f2_SetMainFormTopMost()

           提示:
             f2.SetMainFormTopMost += new SetMainFormTopMostHandle(f2_SetMainFormTopMost);
           这句最关键,你输入到+=之后,按两下Tab,他会自动给你生成回调函数

      
           如下:
          void f2_SetMainFormTopMost(bool topmost)
            {
                label1.Text = "调用成功";//改变label内容的代码
            }
    这里面f2_SetMainFormTopMost就是你用来修改label的方法(回调函数)。 SetMainFormTopMostHandle、SetMainFormTopMost分别是定义的委托和委托实例名称,自己可以随便定义。
    大致就是为f2创建一个用来修改label的方法,然后把该方法绑定到这个委托实例上。

    三、启动f2,在f2中执行这个委托实例,就是SetMainFormTopMost(true)这样写 (参数要和委托的那个声明一 致)
    那么就会调用F1中绑定的那个方法。

    源代码如下:
    Form1中的代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace 跨窗体调用控件
    {
       
         
        public partial class Form1 : Form
        {
           
            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
              
            }

            void f2_SetMainFormTopMost(bool topmost) //回调函数
            {
                label1.Text = "调用成功";
            }

            private void button1_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
                f2.SetMainFormTopMost += new SetMainFormTopMostHandle(f2_SetMainFormTopMost);//给form2中的委托实例SetMainFormTopMost 注册方法
                f2.Show();
            }
        }
    }

    Form2中的代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace 跨窗体调用控件
    {
        public delegate void SetMainFormTopMostHandle(bool topmost); //定义委托
        public partial class Form2 : Form
        {
            public SetMainFormTopMostHandle SetMainFormTopMost;//定义委托实例
            public Form2()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                SetMainFormTopMost(true);//执行委托实例
            }
        }
    }

  • 相关阅读:
    pycharm的一些操作指令和技巧
    Python开发:模块
    python字符编码
    Pyhton开发:Python基础杂货铺
    Python之函数
    python介绍
    记录
    HDOJ3699 A hard Aoshu Problem[暴力]
    HDOJ3697 Selecting courses[贪心]
    HDOJ4054 Hexadecimal View[编码题]
  • 原文地址:https://www.cnblogs.com/dudg/p/delegatecallback.html
Copyright © 2020-2023  润新知