WinFrm窗体的传值方式
比较简单的方法:
一: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窗体的传值方式的更多相关文章
- C#窗体间常用的几种传值方式、以及委托与事件的详细介绍
窗体间的传值,最好使用委托方式传值,开始之前,我们先来说一下委托与事件的关系. 委托:是一个类. 事件:是委托类型的一个特殊实例,只能在类的内部触发执行. 首先创建2个窗体,这里我们以form1为发送 ...
- C# winform窗体间传值(使用委托或事件)
窗体间传值 今天得空,刚好看到网上好多人再找winform窗体间传值的问题,由于昨天项目的优化的感觉不错,就写了个C# winform窗体间传值的demo,希望能给需要的人的带来帮助: 工程的源代码地 ...
- C#使用事件方式Winform窗体之间传值
[摘自:http://www.cnblogs.com/codeToUp/p/5371062.html] 工程的源代码地址:https://github.com/yes-or-no/WinFormTra ...
- QT窗体间传值总结之Signal&Slot
在写程序时,难免会碰到多窗体之间进行传值的问题.依照自己的理解,我把多窗体传值的可以使用的方法归纳如下: 1.使用QT中的Signal&Slot机制进行传值: 2.使用全局变量: 3.使用pu ...
- C#窗体间传值的简便方法/工具
一.问题:窗体间传值必须需要窗体之间有联系,具体有如下方式 窗体间传值涉及到窗体A必须拥有窗体B,这样才可以实现A-B之间传值 窗体A与窗体B在窗体/实例C中,A-B可互相通讯 其他方式,不细讨论,复 ...
- 浅谈Asp.Net中的几种传值方式
一.使用Querystring Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象.如果你想传递一个安全性不是那么太重要或者是 ...
- asp,net 传值方式 优缺点比较
.net C#中页面之间传值传参的六种方法 1.QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用 ...
- dotNET5的MVC页面传值方式总结
本文大致讲解mvc前后端的传值方式,包括control向view.view向control.以及action向action. 一.经典回顾 二.Controller向View传值 1. ViewBag ...
- 页面之间传值方式的总结,五种方式,通知,block,代理,单例,NSUERDEFALUT,
首先代码拿上 1:单例 2:通知 3:代理 4:block方法 5:NSUSERDEFAULT(沙盒文件) 先是单例类: .h文件 @interface DataSource : NSObject @ ...
随机推荐
- python list对象
list对象 1.list定义l=['first','second'] 2.list追加对象list.append('aa');append的方法总是把元素追加到末尾 insert(索引号,'项目') ...
- poj-------(2240)Arbitrage(最短路)
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15640 Accepted: 6563 Descri ...
- debug && release
http://www.cnblogs.com/awpatp/archive/2009/11/05/1597038.html Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调 ...
- 如何管理好项目的DLL
.net fx自带的dll net fx自带的dll,直接添加,注意.net fx版本即可. 第三方类库 如果是第三方类库,使用NuGet从NuGet官网下载,比如json.net,jQuery等. ...
- JS引用类型之——RegExp
前言 之前小猪分享过关于正则表达式的一些内容,具体请看传送门,今天小猪来分享怎么在js中使用正则表达式. 定义 ECMAScript通过RegExp类型来支持正则表达式.使用下面类似Perl的语法,就 ...
- [Jquery]网页定位导航特效
描述:左右联动的导航,非常适合展示页面内容多,区块划分又很明显的,点击右边固定导航项时,左边的内容跟着切换.滑动滚动条的时候,右边的导航也随着左边的展示而进行高亮切换. 思路:比较滚动距离和楼层距离( ...
- ZOJ 3644 Kitty's Game dfs,记忆化搜索,map映射 难度:2
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 从点1出发,假设现在在i,点数为sta,则下一步的点数必然不能是sta的 ...
- IIS CS0016: 未能写入输出文件“c:\WINDOWS\Microsoft.NET\Framework\.。。”--“拒绝访问
解决方案:给Windows下temp文件添IIS_USERS权限即可
- 神奇的NOIP模拟赛 T1 LGTB 玩扫雷
LGTB 玩扫雷 在一个n m 的棋盘上,有位置上有雷(用“*” 表示),其他位置是空地(用“.” 表示).LGTB 想在每个空地上写下它周围8 个方向相邻的格子中有几个雷.请帮助他输出写了之后的棋盘 ...
- 【STL】-deque的用法
初始化: #include <deque> deque<float> fdeque; 算法: fdeque.push_front(f); fdeque.push_back(f) ...