2017-02-17 61 views
-2

,所以我有這個frmUser但要關閉此我要打電話frmPass(我使用ShowDialog()代替Show()調用),將首先確認一個形式,如果用戶是管理員但問題是,當我執行以下如何關閉打開使用的ShowDialog()另一種形式

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

frmPass代碼只隱藏本身,而不是與frmUser一起。而且,這裏是我的代碼調用frmPassfrmUser

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

代碼的位置並不清楚。第一部分在哪裏? –

回答

1

在您的密碼形式,就應該設置形式的DialogResult財產。在例子中;在您的frmPass上,當用戶點擊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來檢查管理員是否被確認。但可能你已經有了不同的機制。不過,你需要隱藏的代碼行放入類frmUserpass.ShowDialog();

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

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

電話後離開其他this.Hide()frmPass來關閉。

EDIT

另一種可能性是將frmUser實例進入的frmPass構造和在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); 

整個事情將工作和隱藏正常。

相關問題