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 中的更改用户按钮以恢复用户,我希望在此会话中已经模拟,因此 impersonatedUser 不为 null 并且 btnRevert.enabled = true; 但一切都始于创建一个新形式。因此我无法恢复如果我不想在 NewForm 中丢失变量我该怎么办?我应该使用this.Visible = false而不是this.Close()等吗?顺便说一句,我在模仿方面没有任何问题。

4

1 回答 1

1

您的主要形式的代码

NewUser yk = newUser()
yk.ShowDialog()

将始终创建一个新的NewUser形式对象。因此,如果您的对象impersonatedUser在类中声明,NewUser它将再次被初始化为新对象。

如果,我猜,对于你来说足以保存 object 的内存信息impersonatedUser,那么你可以创建一个impersonatedUserin Mainform 的对象并将其传递给NewUserform。

以您的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对象的代码,NewUser那么答案可能很少

于 2013-02-13T20:12:50.337 回答