通过最简单的 在Form1 中写 Form2 frm=new Form2();可以通过frm掉用Form2中的非静态变量.但不能控制Form2的控件.也不能获取控件的值.用全局变量降低代码可读性,获取窗体1的textbox值并传递给窗体2,目前我只会2种麻烦的方法.
1.看似最简单的,
form2:
public string value;
public Form2(string m)
{InitializeComponent();
value=m;
}
form1;
Form2 frm=new Form2(Form1.textbox1.text);
这个实现了把Form1的textbox1.text 赋值给了Form2中的value.
这个方法不能传递方法,会占用很多资源.我还不知道如何用这个传递方法,委托.
第2种;
使用委托,委托对应相应的方法,调用方法的返回类型和传入参数必须和委托声明的类型一致.
转载:http://www.cnblogs.com/pfcan66/archive/2012/09/12/2680596.html
1.Form1:
public string a(string k)
{
retrun "Form1方法 "+k;
}
2.在Form2中建立和a方法一样类型的委托对象实例化
public delegate string weituo(string m)--建立委托
public weituo b --实例化委托
3.在Form1中的Form_Load或者其他事件下写(如buton)
Form2 frm=new Form2();
frm.b=a;--把a 方法添加到委托b上
4.在Form2中调用委托b;
textbox.text=b("这是Form2页面");
运行结果:
委托方法就是每次调用不同类型方法都要重写一个.
----------------------------------类中调用主窗体的方法和控件------有时候不知道为啥不好使-----------------------------------------------
要调用的窗体:
public partial class Form1 : Form
{
public static Form1 form1;--建立静态
public Form1()
{
InitializeComponent();
form1=this
}
然后在类中:用 Form1.form.引用的方法
就是this(属性,方法),this始终指向当前对象的.在C# 中,函数或者属性都应该属于一个对象
只要对对象中用this 就可以看到该对象的所有方法属性