窗体之间值的传递方式有很多,自己简单做了一个总结:
一:通过全局的静态变量来传递 (
这是一个双向的传值
)
我们可以自己建立一个类,在里面加一个静态的全局变量,如:
class Helper
{
public static string LoginName = "";
}
这样一来,如果我们想要从一个窗体向令一个窗体传值,便可在第一个窗体给这个类的此变量赋值,再另一窗体同样可以调用。
二:通过构造方法来传值 (
这是一个单向的传值
)
这种方法原来我自己用的是比较多的,看自己习惯喜好吧
这种方式比较简单,我们只要在目标窗体的构造方法里加一个构造方法的重载即可,例:
private string _loginName;
public Form3(string LoginName)
{
_loginName = LoginName;
InitializeComponent();
}
而我们实例化此类的时候把参数传进来即可,如:
Form3 frm3 = new Form3(textBox1.Text);
frm3.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;
}
我感觉说的是比较详细了,希望大家能有所帮助
一:通过全局的静态变量来传递
我们可以自己建立一个类,在里面加一个静态的全局变量,如:
class Helper
{
public static string LoginName = "";
}
这样一来,如果我们想要从一个窗体向令一个窗体传值,便可在第一个窗体给这个类的此变量赋值,再另一窗体同样可以调用。
二:通过构造方法来传值
这种方法原来我自己用的是比较多的,看自己习惯喜好吧
这种方式比较简单,我们只要在目标窗体的构造方法里加一个构造方法的重载即可,例:
private string _loginName;
public Form3(string LoginName)
{
_loginName = LoginName;
InitializeComponent();
}
而我们实例化此类的时候把参数传进来即可,如:
Form3 frm3 = new Form3(textBox1.Text);
frm3.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.Show();
private void showvalue(string str)
{
textBox1.Text =str;
}
我感觉说的是比较详细了,希望大家能有所帮助