gpt4 book ai didi

c# - 处理新表格的正确方法

转载 作者:太空狗 更新时间:2023-10-29 20:51:13 26 4
gpt4 key购买 nike

所以在我的应用程序中,我倾向于动态创建新的表单实例,然后使用 Form.Show() 来显示它们(非模态)。

private void test_click(object sender, EventArgs e)
{
var form = new myForm();
form.Show();
}

但是,Code Cracker 告诉我应该处理这些表格。所以,我用“using”语句包装它们,但它们在打开后立即关闭。

using (var form = new myForm())
{
form.Show();
}

我不想使用 Form.ShowDialog(),因为在某些情况下我会打开只显示报告的新窗口;我不需要它们是模态的。

最佳答案

是否需要在关闭表单后处理表单?

当您使用 Show() 显示表单时,您不需要处理它,因为它会在关闭后处理。但是,当您使用 ShowDialog() 显示表单时,您需要处置该表单,因为它在关闭后不会处置。

当您关闭 Form 时,WM_CLOSE消息将被发送到窗口。如果你看一下 WmClose 的源代码处理 WM_CLOSE 消息的方法,您将看到:

  • 对于模态窗体(您使用 ShowDialog 显示),Dispose 方法将不会被调用,窗体在关闭后存在,您可以使用它的属性获取一些数据,或者您可以再次显示它。

  • 对于非模态表单(您使用 Show 显示),在表单关闭后,将调用 Dispose 方法。

结论是:

  • 当您使用 Show 方法显示表单时,您不需要(也不能)调用 Dispose。表格将在关闭后自行处理。

  • 当您使用 ShowDialog 显示表单时,您需要手动调用 Dispose。一个好的做法是在 using block 中使用模态形式。

示例

要显示模态对话框,最佳做法是使用 using block :

//form will be disposed after the using block
using (var f = new MyForm())
{
if (f.ShowDialog() == DialogResult.OK)
{
//Your logic to handle OK here
}
}

对于非模态对话框,显示并忽略它:

var f = new MyForm();
f.Show();

关于c# - 处理新表格的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39500280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com