zoukankan      html  css  js  c++  java
  • WinForm登陆:窗体间的数据传递

    1. 登陆逻辑

    • FrmMain 为主窗体(启动窗体)
    • FrmLogin 为登陆窗体

    在“主窗体”中使用ShowDialog()方法显示“登陆窗体”,并通过“登陆窗体”的DialogResult告知“主窗体”是否登陆成功。

    1.1 主窗体:

    private void FrmMain_Load(object sender, EventArgs e)
    {
        FrmLogin frm = new FrmLogin();
        if (frm.ShowDialog() == DialogResult.OK)
        {
            // 执行主窗体的一些初始化内容
        }
        else
        {
            this.Close();    // 关闭主窗体
        }
    }

    1.2 登陆窗体:

    private vode btn_Login_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.OK;
    }

    2. 窗体间的数据传递

    “登陆窗体”在执行完毕后,需要将登陆用的信息传递给“主窗体”,其传递的过程就是“暂时”将用户信息存在“主窗体”可以获取的“地方”,根据“地方”不同可以有一下几种方案。

    新建 User.cs

    public class User {
        public string username;
        public User(string username)
        {
            this.username = username;
        }
    }

    2.1 将数据暂存在“登陆窗体”的Tag属性上

    2.1.1 登陆窗体:

    private vode btn_Login_Click(object sender, EventArgs e)
    {
        this.Tag = new User('rianman');
        this.DialogResult = DialogResult.OK;
    }

    2.1.2 主窗体:

    private void FrmMain_Load(object sender, EventArgs e)
    {
        FrmLogin frm = new FrmLogin();
        if (frm.ShowDialog() == DialogResult.OK)
        {
            User user = frm.Tag as User;    // 此处获取“登陆窗体”传递过来的数据
        }
        else
        {
            this.Close();    // 关闭主窗体
        }
    }

    2.2 将数据暂存在“主窗体”的Tag属性上

    2.2.1 登陆窗体:

    private vode btn_Login_Click(object sender, EventArgs e)
    {
        FrmMain main this.Owner as FrmMain;
        main.Tag = new User("rainman");
        this.DialogResult = DialogResult.OK;
    }

    2.2.2 主窗体:

    private void FrmMain_Load(object sender, EventArgs e)
    {
        FrmLogin frm = new FrmLogin();
        if (frm.ShowDialog() == DialogResult.OK)
        {
            User user = this.Tag as User;    // 此处获取“登陆窗体”传递过来的数据
        }
        else
        {
            this.Close();    // 关闭主窗体
        }
    }

    2.3 将数据暂存在类的“静态成员”上

    2.3.1 新建Context.cs

    public class Context
    {
        public static User LoginUser = null;
    }

    2.3.2 登陆窗体:

    private vode btn_Login_Click(object sender, EventArgs e)
    {
        Context.LoginUser = user;
        this.DialogResult = DialogResult.OK;
    }

    2.3.3 主窗体:

    private void FrmMain_Load(object sender, EventArgs e)
    {
        FrmLogin frm = new FrmLogin();
        if (frm.ShowDialog() == DialogResult.OK)
        {
            User user = Context.LoginUser;    // 此处获取“登陆窗体”传递过来的数据
        }
        else
        {
            this.Close();    // 关闭主窗体
        }
    }

    2.4 将数据暂存在“主窗体”的特定属性上

    2.4.1 登陆窗体:

    private vode btn_Login_Click(object sender, EventArgs e)
    {
        FrmMain main = this.Owner as FrmMain;
        main.LoginUser = new User("rainman");
        this.DialogResult = DialogResult.OK;
    }

    2.4.2 主窗体:

    public user LoginUser { get; set; }
    
    private void FrmMain_Load(object sender, EventArgs e)
    {
        FrmLogin frm = new FrmLogin();
        if (frm.ShowDialog() == DialogResult.OK)
        {
            User user = this.LoginUser;    // 此处获取“登陆窗体”传递过来的数据
        }
        else
        {
            this.Close();    // 关闭主窗体
        }
    }
  • 相关阅读:
    RUST实践.md
    redis.md
    opencvrust.md
    aws rds can't connect to mysql server on 'xx'
    Foundation ActionScript 3.0 With Flash CS3 And Flex
    Foundation Flash Applications for Mobile Devices
    Flash Mobile Developing Android and iOS Applications
    Flash Game Development by Example
    Actionscript 3.0 迁移指南
    在SWT中非UI线程控制界面
  • 原文地址:https://www.cnblogs.com/rainman/p/3647724.html
Copyright © 2011-2022 走看看