我遇到了在表单之间滚动时保持值的问题。我有两个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()等吗?顺便说一下,我在模仿中没有任何问题。
答案 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
对象的一些代码,那么答案可能很少另一个