WinForm登陸:窗體間的資料傳遞

Rain Man發表於2014-04-05

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();    // 關閉主窗體
    }
}

相關文章