C#子窗口与父窗口交互(使用委托和事件)

目标:在子窗口Form2上单击按钮时向Form1传递一组自定义参数,并显示在父窗口Form1上。

方法:有很多方法,这里只介绍委托和事件的实现方式。

思路:Form2中定义事件,Form1创建Form2并订阅事件;Form2触发事件后传递参数到Form1,Form1处理参数。

?
?

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 FormDataInteractive

{

/// <summary>

/// powered by shadu {at} foxmail.com

/// </summary>

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

?

private void button1_Click(object sender, EventArgs e)

{

// 创建Form2,并添加事件处理函数

Form2 frm = new Form2();

frm.DataChange += new Form2.DataChangeHandler(DataChanged);

frm.ShowDialog();

}

?

public void DataChanged(object sender, DataChangeEventArgs args)

{

// 更新窗体控件

textBox1.Text = args.name;

textBox2.Text = args.pass;

}

}

}

?

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
FormDataInteractive

{

????public
partial
class
Form2 : Form

????{

????????// 定义委托

????????// public delegate void DataChangeHandler(string x); 一次可以传递一个string

????????public
delegate
void
DataChangeHandler(object
sender, DataChangeEventArgs args);

????????// 声明事件

????????public
event
DataChangeHandler DataChange;

?
?

????????// 调用事件函数

????????public
void
OnDataChange(object
sender, DataChangeEventArgs args)

????????{

????????????if
(DataChange != null)

????????????{

????????????????DataChange(this, args);

????????????}

????????}

?
?

????????public
Form2()

????????{

????????????InitializeComponent();

????????}

?
?

????????private
void
button1_Click(object
sender, EventArgs e)

????????{

????????????// 触发事件, 传递自定义参数

????????????OnDataChange(this, new
DataChangeEventArgs(textBox1.Text, textBox2.Text));

????????}

????}

?
?

????/// <summary>

????/// 自定义事件参数类型,根据需要可设定多种参数便于传递

????/// </summary>

????public
class
DataChangeEventArgs : EventArgs

????{

????????public
string
name { get; set; }

????????public
string
pass { get; set; }

????????public
DataChangeEventArgs(string
s1, string
s2)

????????{

????????????name = s1;

????????????pass = s2;

????????}

????}

}

?

?

时间: 2024-10-11 00:50:56

C#子窗口与父窗口交互(使用委托和事件)的相关文章

winform子窗口与父窗口的交互-使用委托与事件

实现子窗口与父窗口的交互,通过父窗口调用并控制子窗口,子窗口也能控制父窗口,使用委托和事件的方法,可以实现. 1.父窗口调用子窗口,并通过子窗口控制父窗口 新建工程,创建两个窗体    显示子窗体的代码: 子窗体定义事件,父窗体订阅事件(通过子窗体修改父窗体)     2.通过子窗体控制父窗体 父窗体定义事件,子窗体订阅事件(通过父窗体修改子窗体)    3.最终结果 4.完整代码 form1.cs form2.cs 原文地址:https://www.cnblogs.com/moon-boke/

Qt学习3---子窗口与父窗口

创建子窗口后,主窗口的头文件需要  #include "子窗口头文件" 子窗口和父窗口之间相互切换 子窗口没有办法处理父窗口,子窗口此时就需要一个信号: * 信号必须有signals关键字来声明 * 信号没有返回值,但可以有参数 * 信号就是函数的声明,只需声明,无预定义 * 使用:emit mySignal(); 原文地址:https://www.cnblogs.com/anannan/p/10765631.html

[随笔]关于如何实现鼠标穿透窗口和窗口半透明

资料准备 WS_EX_TRANSPARENT | WS_EX_LAYERED WM_NCHITTEST & return HTTRANSPARENT SetLayeredWindowAttributes(-) UpdateLayeredWindow(-) 旁征博引 窗口类型 Overlapped Windows Pop-up Windows Child Windows Layered Windows             \\分层窗口(这是我们这节课研究的重点) Message-Only Wi

js open窗口父子窗口操作

http://zhidao.baidu.com/question/61358246.html?an=0&si=1 js open窗口父子窗口操作 父窗口js代码: function openCrawlPage(){ var crawlWin = window.open("/createReportCrawl.do?          type=1&ao=y","crawl_window","width=1000,height=600,top

全面兼容的Iframe 与父页面交互操作

父页面 Father.htm 源码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>

关于Mdi窗口-父窗口上的控件把子窗口的挡住的问题

using System.Runtime.InteropServices; [DllImport("user32")] public static extern int SetParent(int hWndChild, int hWndNewParent); ///temp2是你的子form temp2.MdiParent = this; temp2.Show(); SetParent((int)temp2.Handle, (int)this.Handle); 原文:http://to

在winform中,关闭窗口时刷新父窗口(原来打开此窗口的窗口)

如何在关闭窗口时刷新父窗口(原来打开此窗口的窗口,不一定是mdi窗口), 这种事情在b/s里很简单,但在winform里却不那么好办.因为你不能关闭第一个窗口时再打开另一个窗口,如果这样的话新窗口就一起被关闭了.但是正因为这样,我们可以让刷新的动作在关闭子窗口时进行,当然所有的动作是在父窗口中进行的.晕,不知道说明白了没有.还是看一下例子吧public partial class Customer : Form    {        public Customer()        {    

js之iframe子页面与父页面通信

iframe子页面与父页面通信根据iframe中src属性是同域链接还是跨域链接,通信方式也不同. 一.同域下父子页面的通信 父页面parent.html <html> <head> <scripttype="text/javascript"> function say(){ alert("parent.html"); } function callChild(){ myFrame.window.say(); myFrame.wi

对张子阳先生对委托和事件的两篇文章的读后思考(说得很透,内附故事一篇)

第一篇 C#中的委托和事件 第二篇 C#中的委托和事件(续) 首先,张子阳先生的这是两篇关于委托和事件间关系的文章,是目前为止我读过的介绍委托和事件以及异步调用最简明清晰文章,作者通过非常有节奏的"标题"->"问题"->"思路"->"实现"->"讲解"的结构,分步骤一步一步地将委托和事件的实现.应用与原理阐述得非常清楚,并且在行文期间将自己有趣的思考过程通过生动的语言表达了出来,使人