Winform中窗体间如何传值
新手都会遇到的问题,在两个窗体之间,怎么样传值?比如一个用户登录以后,怎么样把该用户的信息传入到第二个窗体,我们先来讲解基本的几个方法,以后会用到实体类,到时候操作就更简单了。方法一
在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把this指针传进去。代码如下:主窗体.cs
public class frmMain:Form
{
...
frmControl controlForm=new frmControl(this);
controlForm.Show();
}
子窗体.cs
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
// 主窗体给委托变量赋值就可以了:
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
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"); //委托调用
}
}
谢谢分享!!! 谢谢分享!!! :lol最方便的办法是在用户登录系统的时候把用户主键Id,作为一个全局变量存放在DBHelper中,其它子窗体在都可以直接调用这个DbHelper中的全局变量,方便,简单,无污染、、、、、仅供参考 飞/可爱朋 发表于 2014-5-7 15:53
最方便的办法是在用户登录系统的时候把用户主键Id,作为一个全局变量存放在DBHelper中,其它子窗体在都 ...
这种方式可以叫单例模式 写的太简单了 表示不太懂!
页:
[1]