您的位置:首页 > 其它

WinForm中的窗体传值

2010-12-26 15:21 211 查看
一:全局的静态变量方法(可双向传值)

我们可以自己建立一个类,在里面加一个静态的全局变量,如:

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变量了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: