Form1 窗体里面的单击按钮事件:
private void button1_Click(object sender, EventArgs e)
{
//方法一 将当前窗体作为对象传递到show出的窗体
Form frm=new Form2();
frm.Owner = this;
frm.Show();
}
Form2里面的窗体load加载事件和单击按钮事件
private void Form2_Load(object sender, EventArgs e)
{
Form1 frm = (Form1)Owner;
foreach (var ff in frm.Controls)
{
if (ff is TextBox)
{
this.textBox1.Text = (ff as TextBox).Text;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
//方法一
//接收传递过来的窗体对象,找到窗体上的控件进行赋值
Form1 frm = (Form1)Owner;
foreach (System.Windows.Forms.Control ff in frm.Controls)//遍历传递过来窗体的所有控件
{
if (ff is TextBox)//如果控件是TextBox类型
{
//if (ff.Name.Equals("textBox1"))如果是多个文本框,这里还可以去name
(ff as TextBox).Text= this.textBox1.Text ;
}
}
}
这种传递,多用于将当前窗体作为对象,传递到另个传递里面,使用当前窗体里面控件的值,在show出的Form2窗体可以直接修改Form1窗体的控件的值
方法二:利用窗体类里面传递参数,在说show出的窗体的构造函数里面接收参数
Form1里面的单击事件
private void button1_Click(object sender, EventArgs e)
{
//方法二 在窗体类里面传递参数
string txt = this.textBox1.Text;
Form frm=new Form2(txt);
frm.Owner = this;
frm.Show();
}
Form2 里面的构造函数接收参数
public Form2(string txt)
{
this.textBox1.Text = txt;
InitializeComponent();
}
这种方法不用与在把值回传到第一个窗体里面
第三种方式就是写一个类,声明静态变量,然后接受再传值,这种方法比较常用,这里就不用赘述了。
第四种方式就是声明一个委托和事件
在Form2窗体声明委托和事件
public delegate void getTextdelegate(string text);//定义委托 写早class类外面,定义全局的
public static event getTextdelegate TextCool;//定义事件 写在类里,可以直接用窗体名调用
private void button1_Click(object sender, EventArgs e)
{
if (TextCool != null)
{
TextCool(this.textBox1.Text);
}
}
在Form1窗体里面调用
private void button1_Click(object sender, EventArgs e)
{
Form2 frm=new Form2();
Form2.TextCool += Form2_TextCool;
frm.Show();
}
void Form2_TextCool(string text)
{
this.textBox1.Text=text;
}
就可以实现在Form2里面把值回传到Form1 里面了,在定义的委托里面是string类型,可以放object类型,那么就可以传我们想传的值了