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 ...
随机推荐
- lodash map
_.map(collection, [iteratee=_.identity]) 创建一个经过 iteratee 处理的集合中每一个元素的结果数组. iteratee 会传入3个参数:(value, ...
- 【Java】Java_06 基本数据类型
1.基本数据类型 Java是一种强类型语言,每个变量都必须声明其类型. . Java的数据类型分为两大类:基本类型(primitive type)和引用类型 (reference type) ...
- JAVA的IO操作:内存操作流
掌握内存操作流 输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteArrayOutputStream ByteArrayInpu ...
- GoogLeNet模型的微调
我从零开始训练了GoogLeNet模型. 但它没有给我带来希望的结果. 作为替代,我想对我的数据集中的GoogLeNet模型进行微调. 有谁知道我应该遵循什么步骤? 采纳答案: 假设你正在尝试做图像分 ...
- MVC之ActionFilterAttribute自定义属性
ActionFilterAttribute里有OnActionExecuting方法,跟Controller一样, 同是抽象实现了IActionFilter接口. // 登录认证特性 public c ...
- Xamarin for VS 3.11.1594 Stable版免费完整破解补丁
Xamarin for VS 3.11.1594 Stable版免费完整破解补丁 此版本只能用于3.11.1594版本破解, 其他版本可能会有错误. Android和IOS完整支持,不像某些破解只支持 ...
- JPA ID生成策略(转---)
尊重原创:http://tendyming.iteye.com/blog/2024985 JPA ID生成策略 @Table Table用来定义entity主表的name,catalog,schema ...
- abp相关
在.core中增加类.并指定属性长度. nutget 中运行Add-Migration 名称 Update-Database -Verbose 迁移成功. 1.安装指定版本类库install-pack ...
- 导入mysql文件提示“ASCII '\0' appeared in the statement”
在windows服务器上导入mysql文件时,出现以下报错:ASCII '\0' appeared in the statement, but this is not allowed unless o ...
- java 服务接口API限流 Rate Limit
一.场景描述 很多做服务接口的人或多或少的遇到这样的场景,由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统. 也就是面对大流量时,如何进行流量控制? 服务接口的流量 ...