WinForm中的窗体传值

来源:互联网 发布:激活windows取消 编辑:程序博客网 时间:2024/05/05 20:48

一:全局的静态变量方法(可双向传值)
我们可以自己建立一个类,在里面加一个静态的全局变量,如:
class StrName
{
        public static string strName = "";
}
这样一来,如果我们想要从一个窗体向令一个窗体传值,便可在第一个窗体给这个类的此变量赋值,再另一窗体同样可以调用。
二:通过构造方法来传值(单向的传值)
这种方式比较简单,我们只要在目标窗体的构造方法里加一个构造方法的重载即可,例:
        private string strName;
        public Form2(string strName)
        {
            loginName = strName;
            InitializeComponent();
        }
而我们实例化此类的时候把参数传进来即可,如:
           Form2 fm2 = new Fm2(this.textBox1.Text);
           fm2.Show();
这样一来就把我们所要的值传过来了
三:我们可以通过类的属性来传值 (单向双向都可以)
这个也是比较简单,我们只要在目标窗体的类中声明一个变量封装属性就好了
        private string str;
        public string Str
        {
            get { return str; }
            set { str = value;}
        }
我们创建对象的时候只要给此属性赋值就好了
        Form2 frm2=new Form2();
        frm2.Str=textBox1.Text;
        frm2.Show();

给大家举一个小例子
打开了比如form1的窗体,在from1窗体里面写事件跳到form2窗体,现在是两个窗体同事存在,他现在要把form2窗体中的值传回form1应该怎么办,其实这个利用我们的属性也可以完成,我们就在form1里面加一个文本框在form2中传值让文本框显示,那么我们首先也是先在form1窗体中定义一个属性,像上面那样,这里我们要把传过来的值显示到文本框中,所以写的时候加些东西便好
        private string str;
        public string Str
        {
            get { return str; }
            set { str = value;
            this.textBox1.Text = str;
            }
        }
这样一来我们在给属性赋值的同事便给这个文本框赋值了,现在出现一个问题我们要给此属性赋值,必须要得到此窗体类的对象,而此时窗体已经存在,我们就不能从新实例化了,那么我们可以在打开form2的时候把form1类的对象传过来就好了,
form2中:
        Form1 frm1;
        public Form2(Form1 frm)
        {
            frm1 = frm;
            InitializeComponent();
        }
form1中:打开form2创建对象的时候
         Form2 frm2 = new Form2(this);
         frm2.Show();
这样一来我们可以通过传过来的对象来调用属性了 frm1.Str = "这是传过来的值";这样就大功告成了。
其实,这样就可以了,虽然我们第二第三两种传值方式,我们只要 结合一下就完成了这样的功能,所以变通一下就好了,上面这个例子我们在变通也完全可以声明一个其他对象完成传值,如:数组,sqldatareader的对象
上面的例子其实我们还可以用另一种方式完成,那么我们介绍下一种窗体之间的传值方式
四:用delegate完成传值 (这是一个单向的传值)
Form2中先定义一个delegate:
public delegate void returnvalue(string str );
public returnvalue ReturnValue;
form2 中的事件中添加
    if ( ReturnValue != null )
        ReturnValue("这是传过来的值");

form1中:打开form2创建对象的时候
    Form2 frm2= new Form2( );   
    frm2.ReturnValue = new Form2.returnvalue( showvalue );
    frm2.Show();

private void showvalue(string str)
{
    textBox1.Text =str;
}
我感觉说的是比较详细了,希望大家能有所帮助


如果是在两个无关的窗体间要实现上述的访问可以使用Form的Owenr属性
在Form1中添加:
Form2 form2 = new Form2();
this.AddOwnedForm(form2);
在Form2中添加:
Form1 form1 = (Form1)this.Owner; //直接将已经存在的Form1与form1关联起来
之后就可以适时的访问Form1中的Public变量了
如果是在MDI窗体间要实现上述的访问可以使用Form的ParentForm属性
在Form1中添加:
Form2 form2 = new Form2();
form2.MdiParent = this;
在Form2中添加:
Form1 form1 = (Form1)this.ParentForm; //直接将已经存在的Form1(MDI主窗口)与form1关联起来
之后就可以适时的访问Form1中的Public变量了

原创粉丝点击