簡體   English   中英

不破壞句柄的Form.ShowDialog()

[英]Form.ShowDialog() Without Destroying Handle

我正在嘗試使用Form.ShowDialog顯示表單,如下所示:

var f = new Form();
if(f.ShowDialog() == DialogResult.OK)
{
     ...
}
...
if(f.ShowDialog() == DialogResult.OK)
{
     ...
}

問題是一旦返回對話框結果並關閉窗體,就會調用OnHandleDestroyed。

  • 為什么我關心OnHandleDestroyed? 我在窗體上有一個OpenGL控件,當調用OnHandleDestroyed時它會處理Context。
  • 為什么不丟棄該表單,並在新表單上使用ShowDialog? 我正在嘗試重用表單,因為加載表單的速度很慢-但是用數據填充它很快。

因此問題是:是否可以在不關閉表單的情況下使用ShowDialog()(而是將其隱藏),或者使用Show()和Hide()模態顯示表單?

當您使用ShowDialog顯示表單時,關閉表單后, DestroyHandle將被自動調用。

為了防止這種行為,您可以重寫DestroyHandle方法並編寫自己的邏輯。

public class MyForm : Form
{
    protected override void DestroyHandle()
    {
        if (!Modal || Disposing)
            base.DestroyHandle();
    }
}

暫無
暫無

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

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