目标:在子窗口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;

        }

    }

}

 

 

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

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

    实现子窗口与父窗口的交互,通过父窗口调用并控制子窗口,子窗口也能控制父窗口,使用委托和事件的方法,可以实现. 1.父窗口调用子窗口,并通过子窗口控制父窗口 新建工程,创建两个窗体    显示子窗体的代 ...

  2. layer子窗口与父窗口传值

    layer作为优秀的jquery框架,可以用作弹出组件.日历.分页等,而且实现简单,只有几十k的大小. 此处给出弹出窗口时子窗口与父窗口的传值.js和css这里不展示引入(以下给出目录结构的图片),仅 ...

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

    创建子窗口后,主窗口的头文件需要  #include "子窗口头文件" 子窗口和父窗口之间相互切换 子窗口没有办法处理父窗口,子窗口此时就需要一个信号: * 信号必须有signal ...

  4. asp.net子窗体与父窗体交互

    今天在项目上遇到了这个问题,其实只是window.returnValue的简单应用,不是asp.net的专属内容.作为积累,记录一个简单的实现模型. 图1  用到的文件 从图1中我们可以看到,只用到了 ...

  5. iframe子页面与父页面元素的访问以及js变量的访问

    1.子页面访问父页面元素  parent.document.getElementById('id')和document相关的方法都可以这样用 2.父页面访问子页面元素  document.getEle ...

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

     父页面 Father.htm 源码如下:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...

  7. iframe里面的页面调用父窗口,左右窗口js函数的方法

      iframe里面的页面调用父窗口,左右窗口js函数的方法 实现iframe内部页面直接调用该iframe所属父窗口自定义函数的方法. 比如有A窗口,A内有个IFRAME B,B里面的装载的是C页面 ...

  8. js open窗口父子窗口操作

    http://zhidao.baidu.com/question/61358246.html?an=0&si=1 js open窗口父子窗口操作     父窗口js代码:   function ...

  9. 使用 SetParent 制作父子窗口的时候,如何设置子窗口的窗口样式以避免抢走父窗口的焦点

    原文:使用 SetParent 制作父子窗口的时候,如何设置子窗口的窗口样式以避免抢走父窗口的焦点 制作传统 Win32 程序以及 Windows Forms 程序的时候,一个用户看起来独立的窗口本就 ...

随机推荐

  1. C#入门经典第十章类的成员-1

    类成员的访问级别 public   成员可以由任何代码访问,公共的. private 私有的,成员只能有类中的代码访问.(默认的关键字) internal 内部的,成员只能有定义它的程序集(项目)内部 ...

  2. strut1.X和spring整合的二种方法

    第一种集成方法 原理:在Action中取得BeanFactory对象,然后通过BeanFactory获取业务逻辑对象 缺点:产生了依赖,spring的类在action中产生了依赖查找.(注意和依赖注入 ...

  3. 2016青岛网络赛 The Best Path

    The Best Path Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Pr ...

  4. HDU 1160 FatMouse's Speed 动态规划 记录路径的最长上升子序列变形

    题目大意:输入数据直到文件结束,每行两个数据 体重M 和 速度V,将其排列得到一个序列,要求为:体重越大 速度越低(相等则不符合条件).求这种序列最长的长度,并输出路径.答案不唯一,输出任意一种就好了 ...

  5. MyEclipse中提示SpringMVC的XML配置文件出错解决方法

    手动添加schema文件,方法如下: 1,依次选择:windwos->preferences->myeclipse->files and editors->xml->xm ...

  6. 转 互联网推送服务原理:长连接+心跳机制(MQTT协议)

    http://blog.csdn.net/zhangzeyuaaa/article/details/39028369 目录(?)[-] 无线移动网络的特点 android系统的推送和IOS的推送有什么 ...

  7. PAT (Advanced Level) 1022. Digital Library (30)

    简单模拟题. 写的时候注意一些小优化,小心TLE. #include<iostream> #include<cstring> #include<cmath> #in ...

  8. Linux内核源代码目录树结构

    Linux内核源代码目录树结构. arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录.和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分).mm(内 ...

  9. UIStepper 缩放:UI的使用

    // 实现文件:声明在对应的.h文件.继承至UIViewControllor - (void)viewDidLoad { [super viewDidLoad]; // 按钮 self.stp = [ ...

  10. gulp用法

    转载:http://segmentfault.com/blog/laopopo/1190000000372547 http://javascript.ruanyifeng.com/tool/gulp. ...