C# 委托 父窗口与子窗口间传值

1)目标

父窗口与子窗口都有1个Button和1个Label。

目标1:单击父窗口的Button,子窗口的Label将显示父窗口传来的值。

目标2:单击子窗口的Button,父窗口的Label将显示子窗口传来的值。

2)父窗口代码

using System;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp5
{
    public delegate void ShowMessageService(string msg);
    public partial class FormMain : Form
    {
        private FormChild childForm = new FormChild();
        public FormMain()
        {
            InitializeComponent();
        }

        private void FormMain_Load(object sender, EventArgs e)
        {
            childForm.showMessageChild = new ShowMessageService(UpdateLabel);
            childForm.Show();
        }

        public async void UpdateLabel(string msg)
        {
            await Task.Delay(2000);
            this.label1.Text = msg;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ShowMessageService sms = new ShowMessageService(childForm.UpdateLabel);
            this.BeginInvoke(sms, "Message from FormMain");
        }

    }
}

3)子窗口代码

using System;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp5
{
    public partial class FormChild : Form
    {
        public ShowMessageService showMessageChild;
        public FormChild()
        {
            InitializeComponent();
        }

        public async void UpdateLabel(string msg)
        {
            await Task.Delay(2000);
            this.label1.Text = msg;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.BeginInvoke(showMessageChild, "Message from FormChild");
        }
    }
}

4)解释

4.1)定义委托

public delegate void ShowMessageService(string msg);

4.2)父窗口向子窗口传递消息

①由于父窗口拥有子窗口对象,所以直接利用子窗口的方法来创建委托对象,然后用this.BeginInvoke进行异步调用。

private void button1_Click(object sender, EventArgs e)
        {
            ShowMessageService sms = new ShowMessageService(childForm.UpdateLabel);//定义委托对象,指向子窗口的UpdateLabel方法。
            this.BeginInvoke(sms, "Message from FormMain"); //执行的是子窗口的UpdateLabel方法
        }

4.3)子窗口向父窗口传递消息

①子窗口声明委托对象

public partial class FormChild : Form
    {

public ShowMessageService showMessageChild;//声明

}

②在主窗口给委托对象赋值。

public partial class FormMain : Form
    {
        private FormChild childForm = new FormChild();
        private void FormMain_Load(object sender, EventArgs e)
        {
            childForm.showMessageChild = new ShowMessageService(UpdateLabel); //子窗口的委托对象指向父窗口的UpdateLabel方法。
            childForm.Show();
        }

}

③子窗口用this.BeginInvoke进行异步调用。

private void button1_Click(object sender, EventArgs e)
        {
            this.BeginInvoke(showMessageChild, "Message from FormChild");
        }

原文地址:https://www.cnblogs.com/wyvern0618/p/9442381.html

时间: 2024-10-12 14:11:12

C# 委托 父窗口与子窗口间传值的相关文章

js window.open() 父窗口与子窗口的互相调用

javascript 父窗口与子窗口的互相调用 <html> <head></head> <body> 主要实现父子关系的页面 window.opener 是window.open 打开的子页面调用父页面对象 a.html <title>主页面</title> <script type="text/javascript"> /** 为测试IFrame子窗口调用父窗口的全局变量而添加的测试变量 */ va

JavaScript(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作

一.Iframe 篇 公共部分 //父对象得到子窗口的值 //ObjectID是窗口标识,ContentID是元素ID function GetValue(ObjectID,ContentID) { var IsIE = (navigator.appName == 'Microsoft Internet Explorer') if(IsIE) {//如果是IE alert(document.frames(ObjectID).document.getElementById(ContentID).i

JavaScript用window.opener实现父窗口和子窗口传值

在实际项目中经常会有这样的需求,点击某个按钮弹出对话框,对话框中可以编辑和修改相应的内容,然后再保存并关闭窗口,如果写一个静态的div作为显示隐藏,倒也可以,但是还得调整样式,麻烦点.现在用window.open就可以实现同样的效果,父页面和子页面照样传值. demo代码如下: 父页面: html部分: <!-- Author : 赵一鸣 Blog : http://www.zymseo.com Time : 2016/9/20 --> <!doctype html> <ht

总结js(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作

http://hi.baidu.com/yashua839/blog/item/131fdb2fe547ef221f3089af.html一.Iframe 篇 //&&&&&&&&&&&&&&&&&&&&公共方法开始&&&&&&&&&&&&&&a

C#中父窗口和子窗口之间控件互操作实例

本文实例讲述了C#中父窗口和子窗口之间控件互操作的方法.分享给大家供大家参考.具体分析如下: 很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件.相比较而言,后面稍微简单一些,只要在主窗体中创建子窗体的时候,保留所创建子窗体对象即可. 下面重点介绍前一种,目前常见的有两种方法,基本上大同小异: 第一种,在主窗体类中定义一个静态成员,来保存当前主窗体对象,例如: 代码如下: public static yourMainWindow pCurrentWin = null

父窗口与子窗口的层次关系

原文:父窗口与子窗口的层次关系   父窗口与子窗口的层次关系 周银辉 关于子窗体的层级关系总结一下哈,希望能对大家有些帮助 假设有这样两个窗体:RootWindow,SubWindow,在RootWindow中引发某事件而显示SubWindow 1,如果弹出窗体(比如SubWindow)仅仅是调用Show方法,并且没有设置其Owner属性: ClassRootWindow { void Foo() { SubWindow sw = newSubWindow(); sw.Show(); } } 那

c# 列举所有窗口和子窗口

private delegate bool WNDENUMPROC(IntPtr hWnd, int lParam); [DllImport("user32.dll", ExactSpelling = true)] private static extern bool EnumChildWindows(IntPtr hwndParent, WNDENUMPROC lpEnumFunc, int lParam); [DllImport("user32.dll")] p

父页面与子页面间相互传值

父页面与子页面间相互传值 1.子页面又父页面通过window.open弹出 子页面要向父页面传值,只要在document前面加window.opener即可.如:父页面: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

vue中父子组件主动获取值 父组件向子件间的传值

父组件主动获取子组件的数据和方法: 1.调用子组件的时候定义一个ref <v-header ref='header'></header> 2.在父组件里面通过 this.$refs.header.属性 this.$refs.header.方法 子组件主动获取父组件的数据和方法 this.$parent.数据 this.$parent.方法 父组件向子件间的传值 1.父组件调用子组件的时候 绑定动态属性 2.在子组件里通过props接受父组件传过来的数据 原文地址:https://w