C#窗体传值实例汇总
程序员文章站
2023-12-15 08:16:16
本文实例汇总了c#窗体传值的方法。分享给大家供大家参考。具体方法如下:
1.静态变量传值,非常简单适合简单的非实例的
复制代码 代码如下:public calss fo...
本文实例汇总了c#窗体传值的方法。分享给大家供大家参考。具体方法如下:
1.静态变量传值,非常简单适合简单的非实例的
复制代码 代码如下:
public calss form1:form{
public static int a;
}
public class form2:form{
form1.a=1;
}
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
}
}
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
}
}
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-----------
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;
}
}
//------------------------>>---------------
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");
appdomain.currentdomain.getdata("user");
希望本文所述对大家的c#程序设计有所帮助。