簡體   English   中英

在this.Dispose()之后使用form.ShowDialog();

[英]Using form.ShowDialog() after this.Dispose();

我正在從另一個表單啟動一個表單。 我希望在顯示子表單之前先處理父表單,所以我使用:

 this.Dispose();
 form.ShowDialog(); 

顯示表格,這是正確的方法嗎? 通過調用主窗體中的ShowDialog()啟動窗體from。 我希望在主表單可編輯之前關閉這些表單。

EDIT:

這是基本過程

的MainForm>(ShowDialog的)> Form1中>(處置+的ShowDialog)>窗口2(處置)>的MainForm

如果要確保父級在顯示子級之前不可見,並且希望父級關閉:

var f = new ChildForm();
this.Hide();
f.Show();
this.Close();

ShowDialog()意思是“顯示此表單並在關閉后返回給我 ”。 那不是您想發生的事情。

根據您的評論,從主窗體創建並顯示form2可能更有意義。

主要形式:

   DialogResult form1Result;
     using (var f = new Form1())
     {
        form1Result = f.ShowDialog();
     }
     if (form1Result == DialogResult.OK)
     {
        using (var f2 = new Form2())
        {
           f2.ShowDialog();
        }
     } 

在最初生成Form2的Form1事件中

this.DialogResult = DialogResult.OK;
this.Close();

在任何對象(包括當前稱為this對象)上調用Dispose表示您已經完成了該對象,並且最終完成了該對象。

最好Close第一個對話框,然后顯示第二個對話框。

如果以模態顯示子對話框(在本例中是這種情況),則可以隱藏父對話框。您可以做的是隱藏父窗體,顯示子窗體,然后關閉父窗體。

var form = new SomeForm();
this.Hide();
form.ShowDialog(); // the code will be blocked at this point until the child form closes
this.Close();
this.Dispose(); // i'm not sure if this is necessary anymore. check MSDN

如果顯示的是表單(非模態),則可以隱藏父表單,並偵聽子表單的close事件,然后在處理程序中關閉父表單。

void childFormClosed(Event e) 
{
    this.Close();
}

var form = new SomeForm();
form.Closed += new EventHandler... // I usually rely on intellisense with this
this.Hide();
form.ShowDialog();

抱歉,我認為您不能這樣做,因為當您調用ShowDialog方法時,子窗體將依賴於其父窗體。 因此,處置請求將被暫停,直到您完成子表單為止。

我認為您必須調用“ Show”方法,然后才能調用dispose方法。

子窗體的生命周期取決於其父窗體的生命周期,這意味着,一旦調用父窗體的parent.close,它將處理該實例創建的所有對象。

您必須獨立於父代創建子代。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM