比较简单的方法:

一:1.定义两个窗体

2.在父窗体中加入子窗体的属性

   public ChildFrm ChildFrm { get; set; }

3.加载的时候:

 private void ParentFrm_Load(object sender, EventArgs e)
{
ChildFrm frm = new ChildFrm();
ChildFrm = frm;
frm.Show();
}

4.点击的时候(把子窗体的属性改成公有的):

对象内部的字段或者元素属性最好不要直接让外部直接访问(通过设置的方法来控制)

  public System.Windows.Forms.TextBox txtMsg;
ChildFrm.txtMsg.Text = this.txtMsg.Text;

第二种方法:(提供一个方法)

private ChildFrm ChildFrm { get; set; }

子窗体中提供一个方法为:

 public void SetText(string txt)
{
this.txtMsg.Text = txt;
}

父窗体点击的时候:

ChildFrm.SetText(this.txtMsg.Text);

第三种:发布订阅模式和观察者模式

父窗体:定义发布消息的委托

 public Action<string> AfterMsgSend { get; set; }

委托方式传值

if (AfterMsgSend == null)
{
return;
} AfterMsgSend(this.txtMsg.Text);

子窗体弹出来之前,关注主窗体消息的变化:(委托的方式)

AfterMsgSend += frm.SetText;

第四种方法:(事件的方法)

定义消息发布的事件:

 public event EventHandler AfterMsgChangeEvent;

定义一个子类继承EventArgs:

  public class TextBoxMsgChangeEventArg :EventArgs
{
public string Text { get; set; }
}

触发事件:

AfterMsgChangeEvent(this, new TextBoxMsgChangeEventArg() { Text = this.txtMsg.Text });

拿到父窗体的传来的文本

 public void AfterParentFrmTextChange(object sender, EventArgs e)
{
TextBoxMsgChangeEventArg arg = e as TextBoxMsgChangeEventArg;
this.SetText(arg.Text);
}

事件的方法:

 AfterMsgChangeEvent += frm.AfterParentFrmTextChange;

事件和委托的区别:

1.委托是一个类型   事件是委托的特殊实例

2.事件的触发只能在类的内部触发(相对安全)

3.委托实例和事件时有可比性的(委托和事件没有可比性)

发布订阅模式:(一个人发布多个人收到消息)

先定义一个接口:

  public interface IChildFrm
{
void SetText(string txt);
}

在父窗体中定义一个子窗体的集合:

  public List<IChildFrm> ChildFrmList { get; set; }

子窗体实现接口:

public partial class ChildFrm : Form,IChildFrm

传过来的实体放到当前文本框中:

 public void SetText(string txt)
{
this.txtMsg.Text = txt;
}

父窗体循环:

遍历哪个  所有关注消息变化的子窗体的集合    调用集合中每个元素的一个方法

  if (ChildFrmList == null)
{
return;
} foreach (var item in ChildFrmList)
{
item.SetText(this.txtMsg.Text);
}

父窗体加载:

 private void MainFrm_Load(object sender, EventArgs e)
{
ChildFrm frm = new ChildFrm(); this.ChildFrmList = new List<IChildFrm>(); this.ChildFrmList.Add(frm); frm.Show();
}

大管家模式:(定义一个MasterFrm)

  private void MasterFrm_Load(object sender, EventArgs e)
{
MainFrm mainFrm = new MainFrm(); ChildFrm childFrm = new ChildFrm(); mainFrm.ChildFrmList = new List<IChildFrm>();
mainFrm.ChildFrmList.Add(childFrm); mainFrm.Show();
childFrm.Show();
}

WinFrm窗体的传值方式的更多相关文章

  1. C#窗体间常用的几种传值方式、以及委托与事件的详细介绍

    窗体间的传值,最好使用委托方式传值,开始之前,我们先来说一下委托与事件的关系. 委托:是一个类. 事件:是委托类型的一个特殊实例,只能在类的内部触发执行. 首先创建2个窗体,这里我们以form1为发送 ...

  2. C# winform窗体间传值(使用委托或事件)

    窗体间传值 今天得空,刚好看到网上好多人再找winform窗体间传值的问题,由于昨天项目的优化的感觉不错,就写了个C# winform窗体间传值的demo,希望能给需要的人的带来帮助: 工程的源代码地 ...

  3. C#使用事件方式Winform窗体之间传值

    [摘自:http://www.cnblogs.com/codeToUp/p/5371062.html] 工程的源代码地址:https://github.com/yes-or-no/WinFormTra ...

  4. QT窗体间传值总结之Signal&Slot

    在写程序时,难免会碰到多窗体之间进行传值的问题.依照自己的理解,我把多窗体传值的可以使用的方法归纳如下: 1.使用QT中的Signal&Slot机制进行传值: 2.使用全局变量: 3.使用pu ...

  5. C#窗体间传值的简便方法/工具

    一.问题:窗体间传值必须需要窗体之间有联系,具体有如下方式 窗体间传值涉及到窗体A必须拥有窗体B,这样才可以实现A-B之间传值 窗体A与窗体B在窗体/实例C中,A-B可互相通讯 其他方式,不细讨论,复 ...

  6. 浅谈Asp.Net中的几种传值方式

    一.使用Querystring Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象.如果你想传递一个安全性不是那么太重要或者是 ...

  7. asp,net 传值方式 优缺点比较

    .net C#中页面之间传值传参的六种方法 1.QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用 ...

  8. dotNET5的MVC页面传值方式总结

    本文大致讲解mvc前后端的传值方式,包括control向view.view向control.以及action向action. 一.经典回顾 二.Controller向View传值 1. ViewBag ...

  9. 页面之间传值方式的总结,五种方式,通知,block,代理,单例,NSUERDEFALUT,

    首先代码拿上 1:单例 2:通知 3:代理 4:block方法 5:NSUSERDEFAULT(沙盒文件) 先是单例类: .h文件 @interface DataSource : NSObject @ ...

随机推荐

  1. python与unicode

    Unicode是一种在计算机上使用的字符编码,是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言.跨平台进行文本转换.处理的要求. Uni ...

  2. java(课程设计之记事本界面部分代码公布)

    代码:涉及记事本的一些界面......!! /* *java课程设计之记事本(coder @Gxjun) * 编写一个记事本程序 * 要求: * 用图形用户界面实现. * 能实现编辑.保存.另存为.查 ...

  3. MATLAB实现矩阵分块相乘

    要实现一下功能,这里$\bf{x}_i$为行向量 $${\bf{A}} = \left[ \begin{array}{l}{{\bf{x}}_1}\\{{\bf{x}}_2}\end{array} \ ...

  4. Objective-C( 三、方法的声明与实现)

    OC方法的声明与实现 oc方法的声明在@interface中 大括号外@end上面 oc方法的实现在@implementation 中@end上面 OC方法中,一个参数对应一个冒号 方法名: 例  f ...

  5. Codeigniter 集成sphinx搜索 这里采用的是coreseek中文搜索引擎,具体安装请参考官方网站

    先上效果图 加入sphinx类库(/application/libraries/sphinx_client.php) 0001 <?php 0002 0003 // 0004 // $Id: s ...

  6. jquery之ajax之$.get方法的使用

    jquery对ajax进行了封装,非常方便. 自己用$.get()方法写了个小demo,包括客户端和服务端. 客户端: <!DOCTYPE html> <html> <h ...

  7. [Js]无缝滚动

    效果: 1.默认缓慢往左滚动 2.放到左箭头上还是向左滚动,放到右箭头上向右滚动 3.放到图片上停止滚动,移出继续滚动 思路: 1.计算图片列表ul的宽度 2.开启定时器,使其向左边距不断增大,造成向 ...

  8. 佳佳的魔法药水 (vijos 1285)

    题目大意: 给出N种药水的价格,然后给出一些形如A B C 的关系,表示 A药水+B药水 可以组合出 C药水(保证 A+B 不会得到多种药水). 要求得到1号药水的最少花费和相应的方案数. N< ...

  9. 基于MVC模式的应用框架之struts

    1.struts开发步骤 引入struts的jar包: 在web.xml中引入struts的核心功能,配置struts核心过滤器:(如果项目中用到了其他过滤器,要放在struts过滤器之前,否则会失效 ...

  10. Struts2 validate校验

    一般的,用户注册的时候,我们需要校验一些用户提交过来的参数. 一般有两道屏障,一是在前台页面上使用js进行验证,直接杜绝了不正常信息的提交.二是将提交过来的信息进行验证,不通过则返回注册页面并显示错误 ...