我正在尝试使用 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();
}
}
关于c# - Form.ShowDialog() 不破坏句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46769725/