站在巨人的肩膀上……
窗体间参数传递的方法有:静态成员、属性、构造函数、委托
1、静态成员
窗体1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static string str ;
private void button1_Click(object sender, EventArgs e)
{
str = "hallo";//str在form2初始化的时候被控件调用,所以一定要在创建Form2实例前赋值
Form2 form2 = new Form2();
form2.Show();
}
窗体2:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
label1.Text = Form1.str;
}
2、构造函数
窗体1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Form2 form2 = new Form2("hallo");//创建Form2实例时给构造函数传递实参
form2.Show();
}
}
窗体2:
public partial class Form2 : Form
{
public Form2(string i)
{
InitializeComponent();
textBox1.Text = i;
}
}
3、属性
公共类:
public class Class1
{
public int i;
//利用property的特性(是否共用同一个实例),我们可以灵活的在form之间传递我们想变和不想变的值
public Class1(int j)//可以在Class1的构造函数中添加形参传递 i 的值;
{
//i = 9;
this.i = j;
}
public void modify(int u)
{
i = u;
}
}
窗体1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Class1 ttt;
private void Form1_Load(object sender, EventArgs e)
{
ttt = new Class1(11);//i=9;
Form2 temp = new Form2();
temp.Change = ttt;//Form1和From2公用同一个Class1的实例,类属于引用类型因此Form1和From2公用Class1中的数据
temp.Show();
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = ttt.i.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
ttt.modify(44);
}
}
窗体2:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private Class1 change;//也可以将属性设置成静态的,直接调用(不用创建实例),则两个窗体用的就是同一个变量(这种方法不知道可不可靠)
//还可以直接将Form1 设为属性,直接将Form1 传进来
public Class1 Change
{
get { return change; }
set
{
change = value;//直接将Form1中创建的Class1实例赋值给change,因为类为引用类型,因此change中和Form1中实际调用的是同一个Class1
//change = new Class1(11);//重新创建一个Class1的实例,与Form1中创建的Class1实例就不是同一个了,Class1中的值也就不同享
//change.i = value.i;
}
}
private void Form2_Load(object sender, EventArgs e)
{
}
private void button1_Click_1(object sender, EventArgs e)
{
textBox1.Text = change.i.ToString();
}
private void button2_Click_1(object sender, EventArgs e)
{
change.modify(98);
}
}
4、委托
窗体1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 temp = new Form2();
temp.ReturnValue = new Form2.returnvalue(showvalue);//将委托指向showvalue方法
temp.Show();
}
private void showvalue(int i)
{
textBox1.Text = i.ToString();
}
窗体2:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public delegate void returnvalue(int i);//定义委托
public returnvalue ReturnValue;// 创建委托的实例
private void Form2_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
if (ReturnValue != null)
ReturnValue(8);//调用方法showvalue
}
}
5、父窗体,子窗体
父窗体:
public partial class FMMain : Form
{
public FMMain()
{
InitializeComponent();
label1.Text = "hallo Father";
label1.Visible = false;
}
string strA;
public string StrA
{
get { return strA; }
set { strA = value; }
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
strA = label1.Text;
FMChild fmchild = new FMChild();
//fmchild.Owner = this;//声明子窗体是FMChild,就可以接收到子窗体的属性值
fmchild.Show(this);//声明子窗体是FMChild
//fmchild.Dispose();
label2.Text = fmchild.StrB;
}
}
子窗体:
public partial class FMMain : Form
{
public FMMain()
{
InitializeComponent();
label1.Text = "hallo Father";
label1.Visible = false;
}
string strA;
public string StrA
{
get { return strA; }
set { strA = value; }
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
strA = label1.Text;
FMChild fmchild = new FMChild();
//fmchild.Owner = this;//声明子窗体是FMChild,就可以接收到子窗体的属性值
fmchild.Show(this);//声明子窗体是FMChild
//fmchild.Dispose();
label2.Text = fmchild.StrB;
}
}