问题: 有两个窗体,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);//执行委托实例
        }
    }
}

C#跨窗体调用控件(委托回调函数使用例子)的更多相关文章

  1. C# 委托实例(跨窗体操作控件)

    在C#里面却是可以不用自定义消息这么复杂的方法来实现跨窗体调用控件,C#有更好的办法就是委托. 效果描述:有两个窗体,FORM1(一个名为“打开form2”的button控件)和FORM2(一个名为“ ...

  2. Winform跨窗体操作控件(使用委托)

    Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作. 实例介绍:两个窗体,F ...

  3. C# 跨线程调用控件

    在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应.  同时我们又需要在工作线程中更新UI界面上的控件, 下面介绍几种常用的方法 阅读目录 线程间操作无效 第一种办法:禁 ...

  4. 【转载】C# 跨线程调用控件

    转自:http://www.cnblogs.com/TankXiao/p/3348292.html 感谢原作者,转载以备后用 在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停 ...

  5. C# 跨线程调用控件的4中方法

    原文:C# 跨线程调用控件 在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应.  同时我们又需要在工作线程中更新UI界面上的控件, 下面介绍几种常用的方法 阅读目录 线 ...

  6. 跨线程调用控件之MethodInvoker

    原文:http://www.cnblogs.com/cm8448940/archive/2008/07/10/1240045.html 使用到两个控件,一个按钮button1,一个标签label1. ...

  7. winform 跨窗体给控件传值 分类: WinForm 2014-08-02 16:33 195人阅读 评论(0) 收藏

    两个窗体 FormA,FormB; FormA窗体中有一文本框控件:TextBox; FormB窗体中有一变量:txtJSJ 目的:把变量赋值给文本框 实现: 设置TextBox属性: Modifie ...

  8. swiper控件(回调函数)

    来源 属性: swiper.slides.length 1.onInit(swiper): function(){...} swiper初始化完成,会调回调  onInit 方法 获取当前swiper ...

  9. WinForm与WPF下跨线程调用控件

    Winform下: public delegate void UpadataTextCallBack(string str,TextBox text); public void UpadtaText( ...

随机推荐

  1. jQuery基础---Ajax进阶

    原文:jQuery基础---Ajax进阶 内容提纲: 1.加载请求 2.错误处理 3.请求全局事件 4.JSON 和 JSONP 5.jqXHR 对象 发文不易,转载请注明出处! 在 Ajax 基础一 ...

  2. DELL iDRAC 远程虚拟机报错:虚拟介质分离或所选虚拟磁盘驱动器的虚拟介质重定向已由另一用户使用

    原因很简单,那就是虚拟介质的映射功能,只能被使用一次. 推荐做法: 1.由于通过远程,在Lifecycle Controller里DeployOS安装系统,需要在虚拟介质里映射ISO,因此映射功能要留 ...

  3. VMware Linux 下 Nginx

    负载   VMware Linux 下 Nginx 安装配置 - nginx.conf 配置 [负载两个 Tomcat] (三) Weiseditor 2014-11-26 23:42 阅读:1 评论 ...

  4. QT界面应用程序的语言国际化

    对字符串使用tr包含起来,因为tr是QObject的一个静态函数,所以它可以直接调用. 在生成language.ts文件之前应该编辑.pro文件,如下: QT += core gui greaterT ...

  5. 微软的权限框架Asp.Net Identity

    Asp.Net Identity 深度解析 之 注册登录的扩展   关于权限每个系统都有自己的解决方案,今天我们来讨论一下微软的权限框架Asp.Net Identity ,介绍如下  http://w ...

  6. C#:判断当前程序是否通过管理员运行

    原文:C#:判断当前程序是否通过管理员运行 public bool IsAdministrator() { WindowsIdentity current = WindowsIdentity.GetC ...

  7. jquery 超简单的点赞效果

    1.HTML(可以优化一下,尽量少些几个标签.....) <div id="dianz"> <b class="cz"><em&g ...

  8. log4net项目中如何配置,以下详解

    log4net.config配置文件 <?xml version="1.0" encoding="utf-8"?> <log4net debu ...

  9. jquery插件推荐

    jQuery 是继 prototype 之后又一个优秀的 Javascript 框架.其宗旨是—写更少的代码,做更多的事情.它是轻量级的 js 库(压缩后只有21k) ,这是其它的 js 库所不及的, ...

  10. Liunx readlink命令

    readlink命令 分类: Shell 2013-07-13 16:41 417人阅读 评论(0) 收藏 举报 readlink是linux系统中一个常用工具,主要用来找出符号链接所指向的位置. 在 ...