Winform 主窗体更换 构造函数传值

时间:2022-06-26 04:23:16

制作登录窗体:

制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体

直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false

Form1 f1 = new Form1(); f1.Show(); this.Visible = false;

View Code

登陆界面

namespace WindowsFormsApplication1 { public partial class Login : Form { public string username;//定义一个变量给子窗体传值 public Login() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //取出用户名和密码 string uid = txtuid.Text; string pwd = txtpwd.Text; if (uid != "" && pwd != "") { LoginDA da = new LoginDA(); //连接数据库 if (da.DengLu(uid, pwd)) //登录查询 { //将用户名赋值给成员变量username username = uid; //将该窗体的返回值变为OK this.DialogResult = DialogResult.OK; //将该窗体关闭 this.Close(); } else { MessageBox.Show("用户名或密码错误!"); } } else { MessageBox.Show("用户名和密码不能为空!"); } } private void Login_Load(object sender, EventArgs e) { } } }

View Code

另:这样写的话再关闭第二个窗口的时候,,程序并没有完全结束,第一个登陆窗口仍然存在,虽然不显示

因此我们用到构造函数传值,并且这样可以实现打开唯一窗口(不重复打开同一个窗口)

构造函数传值:

构造函数可以设置参数,当实例化这个窗体时,可以把某个我们需要的类型的参数传递进来,比如要点击登录时,将一个User自定义对象以及登录窗体本身传递给将要打开的窗体

Form2 F2 = null; public Form1(Form2 f2, Users u) { InitializeComponent(); F2 = f2;     txt_username.Text = u.UserName;//传递进来的对象使用示例 }

View Code

由于作用域问题,传递进来的参数只能在构造函数中使用,可在外面设置一个全局变量,在构造函数中把传递进来的值赋给全局变量,这样在本程序中其他事件可以随意调用,如上

因为form1不是主窗体 所以关闭form1时并不会结束程序,我们只需要写一个关闭form1时触发的事件即可(FormClosing或FormClosed):

private void Form1_FormClosing(object sender, FormClosingEventArgs e) { F2.Close(); }

View Code

此时使用到了上面传递进来的f2,通过赋值给全局变量F2从而控制了form2的关闭。

打开唯一窗体:

如果多次点击同一个登陆按钮,打开了多个登陆后的窗体,这样是不合理的

同样可以通过构造函数传值来控制,在主窗体中创建一个list<Form>公共集合