C#窗体传值
整理一下:
1.静态变量传值,非常简单适合简单的非实例的
public calss form1:Form{
public static int A;
}
public class form2:Form{
form1.A=1;
}
2.委托传值
public class form1:Form{
public int A{get;set;}
public static Action<int> setIntADelForClass;//类的委托
public Action<int>setIntADel //实例的委托
public void setintA(int a){
A=a;
}
public void form_load(object sender, EventArgs e){
setIntADelForClass=setIntA;
setIntADel =setIntA;
}
}
public class form2:Form{
public void setFom1IntA{
form1.setIntADelForClass(10);//通过类的委托将form1 的A变量设置为10
form1 fm1=new form1();
fm1.setIntADel(12);//通过实例的委托将新实例fm1的A变量设置为12
}
}
3.使用onwer属性,适合对话框之间的传值
public class Form1:Form{
public int A{get;set;}
private void button1_click(object sender, EventArgs e){
A=10;
Form2 fm2=new Form2();
fm2.ShowDialog(this);
}
}
public class Form2:Form{
private void button1_Click(object sender, EventArgs e)
{
Form1 fm = (Form1)this.Owner;
MessageBox.Show(fm.A);//读Form1的A
fm.A=11;//写Form1的A
}
}
当然也可以使用委托继续传值
4.重构窗体构造函数,初始化的时候传值,只适合初始化的适合,不够方便
5.委托+事件的方法
下面代码是一个点击Form1 button 使Form2的button显示Form1.textbox内容
可以一次性传很多值,步骤是在窗体A中声明一个事件,B窗体中实现相同方法签名的方法为事件赋值,B中回调该方法
Form1的代码:
//--------------------------------------->>--------------------Form1---------------
public partial class Form1 : Form{
public string B //获取textbox1的text
{
get { return textBox1.Text; }
set
{
textBox1.Text = value;
}
}
public delegate void EventArgsaccept(object sender, acceptEventArgs e);//声明一个事件签名的委托
public static event EventArgsaccept accept;//相当于实例化一个事件
private void button1_Click(object sender, EventArgs e)
{
acceptEventArgs ae = new acceptEventArgs();
ae.b = B; if (accept != null) {
accept(this,ae);
}
}
} }
public class acceptEventArgs : EventArgs {//封装EventArgs类,添加可传递的属性
public string b { get; set; }
}
//------------------->>----------------------------------end code of form1----------- form2的代码,实现一个相同签名的方法,如我们的accept的签名是 方法名(object a,acceptEventArgs b);
//-------------------------------------->>---------------------------------------code of form2---
public partial class Form2 : Form{
private void Form2_Load(object sender, EventArgs e)
{
Form1.accept += Form1_accept;//为form1的事件赋值,当form1执行该事件的时候会执行该方法
}
void Form1_accept(object sender,acceptEventArgs e) {//实现一个相同方法签名的方法
this.button1.Text = e.b;
}
}
//------------------------>>---------------
具体的原理,我想因为委托是函数指针所以可以通过传值能保存函数指针的位置?所以可以标记相应的实例的,执行其他实例的方法?
还没看编译原理,发表一下自己看法,不要误导大众
6.通过全局数据读写,适合登陆验证
AppDomain.CurrentDomain.SetData("user", "小明");
AppDomain.CurrentDomain.GetData("user");
C#窗体传值的更多相关文章
- C#做有模和非模式化窗体 传值例程
有模窗体:指的是一定要在第二个窗体上操作之后 才能去操作前者窗体 :例如,如果一个对话框,在可以切换到其它窗体或对话框之前要求先单击"确定"或"取消",则它就是 ...
- C#基础练习(使用委托窗体传值)
主界面: Form1中的代码: namespace _06委托练习_窗体传值 { public partial class Form1 : Form { public ...
- Winform开发之窗体传值
Winform的窗体之间的数据传递是开发的必备技术,下面介绍几种典型的传值方法 1.构造函数传值,但这种方法是单向的(推荐) 上代码,先传值 private void button2_Click(ob ...
- C#跨窗体传值的几种方法分析(很详细)
创建一个Winform窗体应用程序项目,然后添加一个Form2窗体. 在Form1和Form2中各添加一个textBox和button: 单击Form1中的button1,弹出Form2,然后要做的就 ...
- C#学习笔记(31)——委托窗体传值
说明(2017-11-23 19:31:53): 1. 关于委托和窗体传值,一下午在网上查阅了大量资料,基本就是CSDN的论坛和博客园的文章,大家都在举例子,烧水.鸿门宴,看评论说还看到过沙漠足球的, ...
- C#学习笔记(9)——委托(窗体传值)
说明(2017-5-30 11:38:06): 1. 窗体1传值到窗体2,只要实例化Form2,“Form2 frm2 = new Form2(txt1.Text)”,这里要给Form2加一个带参数的 ...
- C#跨窗体传值
果然C#的跨窗体传值比vb难得多,vb就定义一个全局变量就ok,但是C#还要考虑到命名空间的问题 frmMain要调用LoginUI的两个值,但是在此同时,frmMain又要引用LoginUI,所以说 ...
- WinForm开发,窗体显示和窗体传值相关知识总结
主窗体中代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...
- C# WinForm 父窗体 子窗体 传值
C# WinForm 父窗体 子窗体 传值 本次示例效果如下:Form1为父窗体(包含textBox1.button1)Form2为子窗体(包含textBox2.button2) 父窗体给子窗体传值= ...
- C# Winform 窗体传值 利用委托 子窗体传值给父窗体
常用的Winform窗体传值有两种方式. 1.更改Form.designer.cs文件,将控件的设为Public,供子窗体访问. 在designer.cs文件的最后,找到你的控件声明. private ...
随机推荐
- Linux 后台开发常用命令
1.automake编译 autoreconf -isv ./configure make 2.远程获取代码 rsync -aPvr --exclude=*/log/* *.*.*.*::home/s ...
- GBDT--简单理解
梳理 1.Model Ensemble 能够分为三大类:Bagging,Boosting. Stacking. 2.Boosting能够说是一个思想(框架),而Adaboost等算法仅仅是其一个子类, ...
- oracle闪回某个时间段的数据
闪回2013-08-08 08:08:08的数据: insert into table_1 select * from table_2 as of timestamp to_date('2013 ...
- Service#onStartCommand返回值解析
Service#onStartCommand返回值解析 Service类有个生命周期方法叫onStartCommand,每次启动服务(startService)都会回调此方法.此方法的原型例如以下: ...
- Titel Block不显示
在原有原理图上New page时不显示Titel Block 解决办法:两种(1)(2) 方法1.在新建的原理图上右键选择Schematic Page Properties,按下图勾选即可 方法2.进 ...
- mac之homebrew安装
通过homebrew可以管理众多开源软件的安装和卸载.使用homebrew可以非常容易的安装 os x中没有包含的unix工具包和语言包,比如wget;node;lua;rabbitmq;nginx等 ...
- [HNOI2008]玩具装箱toy(dp+斜率优化)
斜率优化问题一般都是决策单调问题.对于这题能够证明单调决策. 令sum[i]=sigma(c [k] ) 1<=k<=i , f[i]=sum[i]+i , c=L+1; 首先我们能 ...
- iOS开发常见错误(转)
//大全 //读取数据库数据 -(void)movethesqlitefile{ NSString *sourcepath=[[NSBundle mainBundle]pathForResource: ...
- 分布式服务框架 Zookeeper(四)官方编程指南
握草,是不是加了官方两个字就可以唬人了. 使用ZooKeeper开发分布式应用 简介 这篇文档是为了那些想利用ZooKeeper的协调服务来构建分布式应用的开发人员而写滴,不相干的走一边去哈.在这儿有 ...
- 分布式服务框架 Zookeeper(三)官方入门指南
入门指南:使用ZooKeeper来协调分布式应用 这篇文档包含了让你快速上手ZooKeeper的信息.主要是针对那些想要试一把ZooKeeper的开发人员,包含了安装一个单一ZooKeeper服务器的 ...