欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#窗体传值实例汇总

程序员文章站 2023-12-16 11:17:34
本文实例汇总了c#窗体传值的方法。分享给大家供大家参考。具体方法如下: 1.静态变量传值,非常简单适合简单的非实例的 复制代码 代码如下:public calss fo...

本文实例汇总了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#程序设计有所帮助。

上一篇:

下一篇: