0

フォーム間をスクロールしているときに値を保持することに問題があります。2 つの Windows フォームがあります。1 つは Main で、もう 1 つは NewUser です。

メイン画面で [ユーザーの変更]ボタンをクリックすると、次のようになります。

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;            
    }

ユーザーを偽装した後、ユーザーに戻すことができますが、フォームを閉じてメインの [ユーザーの変更] ボタンをクリックしてユーザーを元に戻すと、このセッションでは既に偽装されていると予想されるため、impersonatedUser は null ではなく、btnRevert.enabled = true; しかし、すべては新しいフォームを作成することから始まります。したがって、元に戻すことはできません NewForm で変数を失いたくない場合はどうすればよいですか? this.Close()などの代わりにthis.Visible = falseを使用する必要がありますか? ちなみに私は偽装で何の問題もありません。

4

1 に答える 1

1

メインフォームのコード

NewUser yk = newUser()
yk.ShowDialog()

常にフォームの新しいオブジェクトを作成しますNewUser。したがって、オブジェクトimpersonatedUserがクラスNewUserで宣言されている場合、オブジェクトは再びnewとして初期化されます。

オブジェクトの情報をメモリに保持するのに十分であれば、in formimpersonatedUserのオブジェクトを作成し、それをformに渡すことができます。impersonatedUserMainNewUser

あなたの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 に答える