Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 在Windows窗体之间保存值_Winforms_C# 4.0 - Fatal编程技术网

Winforms 在Windows窗体之间保存值

Winforms 在Windows窗体之间保存值,winforms,c#-4.0,Winforms,C# 4.0,在窗体之间滚动时,我在保存值方面遇到问题。我有两张Windows窗体。其中一个是Main,另一个是NewUser 当我在Main中时,单击更改用户按钮: NewUser yk = new NewUser(); yk.ShowDialog(); 加载新用户表单时: private void NewUser_Load(object sender, EventArgs e) { if (impersonatedUser == null) {

在窗体之间滚动时,我在保存值方面遇到问题。我有两张Windows窗体。其中一个是Main,另一个是NewUser

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

NewUser yk = new NewUser();
        yk.ShowDialog();
加载新用户表单时:

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()等吗。?顺便说一句,我在模拟方面没有任何问题。

您的代码以主窗体显示

NewUser yk = newUser()
yk.ShowDialog()
将始终创建
NewUser
表单的新对象。因此,如果您的对象
impersonatedUser
在类
NewUser
中声明,它将再次初始化为new

我想,如果您有足够的时间在内存中保存对象
impersonatedUser
的信息,那么您可以在
Main
表单中创建
impersonatedUser
的对象,并将其传递给
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();
如果您可以在
NewUser
表单中显示一些关于如何初始化
impersonatedUser
对象的代码,那么答案可能是另一个