0

このコードを使用して、panel1(フォームコンテンツ) のフォームを非表示にしたい:

frmChangePassword frmChangePassword = new frmChangePassword();
frmChangePassword.Hide();

運がない。パネルに表示するコードは次のとおりです。

//SHOW CHANGEPASSWORD FORM
if (isChangePasswordActive == false)
{
     isChangePasswordActive = true;
     frmChangePassword frmChangePassword = new frmChangePassword();
     frmChangePassword.TopLevel = false;
     frmChangePassword.Parent = this.panel1;
     frmChangePassword.Show();   
}

パネルのコンテンツをクリアして、同じパネルに新しいフォームを表示する方法はありますか? よろしくお願いします。

4

2 に答える 2

1

パスワード フォームの新しいインスタンスを作成しています。現在のインスタンスを取得して非表示にする必要があります。私が考えることができる2つの方法があります:

  1. フォームを表示するために作成した frmChangePassword オブジェクトを保持し、そのオブジェクトで hide メソッドを呼び出します。そのオブジェクトのスコープを変更する必要がある場合があります。

  2. Application.OpenForms コレクションを使用して、開いているパスワード フォームのインスタンスを取得し、非表示にします。

私は最初のアプローチで行きます。

于 2012-08-11T08:17:49.983 に答える
0

問題は、新しいフォームを作成してから、そのフォームのパネルを非表示にしていることです。newキーワードを使用したため、次のことがわかります。

frmChangePassword frmChangePassword = new frmChangePassword();
frmChangePassword.Hide();  // affects the ^^ NEW instance ^^ you just created!!

そのため、コードは実際に実行するはずのことを正確に実行するという点で正常に機能しますが、フォームの既存のインスタンスでパネルを非表示にするという意図した結果が得られません。

フォームの既存のインスタンスへの参照を取得する方法を見つける必要があるため、これは少し複雑になります。それを行うためにコードを再設計する方法を説明するには、コードをもっと見る必要があります。一般に、このコードを記述しているメソッド (非表示にする必要があるメソッド) は型Form(またはfrmChangePassword) のパラメーターを受け取り、呼び出し元は変更するフォームの現在のインスタンスを渡します。

于 2012-08-11T08:08:15.030 に答える