新手都会遇到的问题,在两个窗体之间,怎么样传值?比如一个用户登录以后,怎么样把该用户的信息传入到第二个窗体,我们先来讲解基本的几个方法,以后会用到实体类,到时候操作就更简单了。
方法一
在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把this指针传进去。代码如下: 主窗体.cs
[C#] 纯文本查看 复制代码
public class frmMain:Form
{
...
frmControl controlForm=new frmControl(this);
controlForm.Show();
}
子窗体.cs
[C#] 纯文本查看 复制代码
public class frmControl:Form //子窗体,用来控制主窗体的某些显示!
{
private frmMain mainForm;
public frmControl(frmMain mainForm)
{
this.mainForm=mainForm;
}
private void button1_Click(object sender,EventArgs e)
{
frmMain.textBox1.Text=this.textBox1.Text;
//把子窗体的文本框值传递给主窗体的文本框!
}
}
方法二
为了进一步降低窗体之间的耦合度,我们可以用委托来实现这个需求。代码如下:
主窗体.cs
[C#] 纯文本查看 复制代码 // 主窗体给委托变量赋值就可以了:
public partial class MainForm : Form
{
private ChildForm loginForm = new ChildForm();
public MainForm()
{
InitializeComponent();
loginForm.TitleChanged = new
ChildForm.TitleChangedEventHandler(FormTitleChanged);
}
protected void FormTitleChanged(string title)
{
this.Text = title;
}
private void button1_Click(object sender, EventArgs e)
{
loginForm.Show();
}
}
子窗体.cs
[C#] 纯文本查看 复制代码 public partial class ChildForm : Form
{
// 声明和定义委托
public delegate void TitleChangedHandler(string title);
public TitleChangedEventHandler TitleChanged;
public ChildForm()
{
InitializeComponent();
}
private void btn_Ok_Click(object sender, EventArgs e)
{
if (TitleChanged != null)
TitleChanged("Test Title"); //委托调用
}
}
|