在Windows窗体之间保存值

时间:2013-02-13 07:56:33

标签: winforms c#-4.0

我遇到了在表单之间滚动时保持值的问题。我有两个Windows窗体。其中一个是Main,另一个是NewUser

当我在Main时,点击更改用户按钮:

NewUser yk = new NewUser();
        yk.ShowDialog();

加载NewUser表单时:

private void NewUser_Load(object sender, EventArgs e)
    {
        if (impersonatedUser == null) 
        {
            txtNewUserName.Select();
            return;
        }


        btnRevert.Enabled = true; //user may revert back to the old user
        btnLogon.Enabled = false;
        txtNewUserName.Enabled = false;
        txtPassword.Enabled = false;
        btnRevert.Select();            
    }

需要恢复的:

private void btnRevert_Click(object sender, EventArgs e)
    {
        // revert to previous user
        impersonatedUser.Undo();
        btnRevert.Enabled = false;
        btnLogon.Enabled = true;            
    }

在我模仿用户之后我可以恢复用户但是如果我关闭表单然后单击Main中的Change User按钮以还原用户,我希望在此会话中已经模拟,因此impersonatedUser不为null并且btnRevert.enabled =真正;但一切都从创建新表格开始。因此,我无法还原如果我不想在NewForm中丢失变量,我该怎么办?我应该使用 this.Visible = false 而不是 this.Close()等吗?顺便说一下,我在模仿中没有任何问题。

1 个答案:

答案 0 :(得分:1)

您的主要表单中的代码

NewUser yk = newUser()
yk.ShowDialog()

将始终创建NewUser表单的新对象。因此,如果您在impersonatedUser阶段声明的对象NewUser,它将再次初始化为新的。

我想,如果你足以保留对象impersonatedUser的内存信息,那么你可以用impersonatedUser形式创建一个Main的对象,然后将其传递给{{ 1}}形式。

NewUser形式:

Main

Private YourClassOfUser impersonatedUser; 形式:

NewUser

然后在Private YourClassOfUser impersonatedUser; //Then create a custom constructor with parameter Public void NewUser(YourClassOfUser inImpersonatedUser) { this.impersonatedUser = inImpersonatedUser; } 表单中打开一个带有此构造函数的Main表单

NewUser

如果您可以在NewUser yk = newUser(this.impersonatedUser); yk.ShowDialog(); 表单中显示有关如何初始化impersonatedUser对象的一些代码,那么答案可能很少另一个