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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM