2017-02-17 5 views
-2

ので、私はこのfrmUserを持っているが、これを閉じるために、私は、ユーザーが管理者である場合には、第1確認すること(私が代わりにShow()ShowDialog()を使用して呼び出した)frmPassを呼び出す必要がありますしかし、問題は、私は

frmUser us = new frmUser(lblEID.Text, lblAdmin.Text, lblType.Text); 
us.Hide(); 
this.Hide(); 

frmPass以下のコードを実行したときにのみfrmUserと一緒に自分自身を隠し、ではありません。また、ここfrmPassを呼び出す私のコードは、パスワードの形式ではfrmUser

frmPass pass = new frmPass(lblAID.Text, lblName.Text, lblType.Text, "User Module"); 
pass.ShowDialog(); 
+0

コードがどこに配置されているかは不明です。最初の部分はどこですか? –

答えて

1

からだ、あなたはそのフォームのDialogResultプロパティを設定する必要があります。例えば、 frmPassで、ユーザーがボタンの[OK]をクリックすると、コードはユーザー名とパスワードが有効かどうかをチェックします。すべてがOKならば、次のようにダイアログの結果をOKに設定します。

private void btnOk_Click(object sender, EventArgs e) 
{ 
    this.DialogResult = DialogResult.Ok; 
} 

これはフォームを閉じます。 frmUserではあなたが必要な場合は、このように、frmPassフォームのDialogResultが何であるかを確認することができます。

frmPass pass = new frmPass(lblAID.Text, lblName.Text, lblType.Text, "User Module"); 
DialogResult dr = pass.ShowDialog(); 

if (dr == DialogResult.Ok) 
{ 
    //do code if form is closed with OK dialog result 
} 
else 
{ 
    // some warning to user... 
} 
0

問題は、あなたがfrmUserの間違ったinstaceを隠そうとしているということです。最初のコードの通し番号がクラスfrmPassの内部にあると仮定します。ここで、非表示にしようとする新しいインスタンスを作成します。しかし元のインスタンスを非表示にしたいとします。

Ninoが既に提案したように、DialogResultを使用して管理者が確認されているかどうかを確認することもお勧めします。しかし、あなたはすでに別の仕組みを持っているかもしれません。それにもかかわらず、あなたはそれを閉じるためにfrmPassで他のthis.Hide()を残す

private void button1_Click(object sender, EventArgs e) 
{ 
    formPass pass = new formPass(); 
    pass.ShowDialog(); 

    if(AdminIsConfirmed) 
    { 
     this.Hide(); 
    } 
} 

pass.ShowDialog();の呼び出しの後、クラスfrmUserに隠れコード行を配置する必要があります。

EDIT

別の可能性は、frmPassのコンストラクタにfrmUserインスタンスを通過しfrmPassタイプfrmUserの変数を持っていることであろう。あなたはそれをオーバーロードする必要があります。今、このような

public partial class formPass : Form 
{ 
    formUser us; 
    public formPass(/* all that stuff that you have plus*/, formUser us) 
    { 
     InitializeComponent(); 

     this.us = us; 
    } 

コールfrmPass

frmPass pass = new frmPass(lblAID.Text, lblName.Text, lblType.Text, "User Module", this); 

今、あなただけの行削除することができます。

frmUser us = new frmUser(lblEID.Text, lblAdmin.Text, lblType.Text); 

をし、全部が動作して非表示になりますが正しく。