因此,在我的应用程序中,我倾向于动态创建表单的新实例,然后用于Form.Show()显示它们(非模态)。
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(),因为在某些情况下,我会打开仅显示报告的新窗口;我不需要他们是模态的。
Form.ShowDialog()
嗯,“代码破解者”似乎是该工具的一个非常合适的术语,它的建议无疑使您编写了破坏程序的代码。黄金法则是 永远不要 相信静态代码分析工具中的IDisposposable建议,他们都不会对代码 执行 有足够的了解。他们永远无法弄清楚哪个Dispose()调用可以完成工作。
它看不到的是Form类已经知道如何处置自己。这样做很容易,当窗口关闭时,对象变得不可用。如果没有更多的窗口,则没有理由继续使用Form对象。在.NET中,奢侈品不是很常见,但肯定是受45年前为Xerox工作的聪明程序员的启发。
您只需要记住一个特殊的规则,当您使用ShowDialog()显示窗口时,它不会 自行 处理。这是故意的,这使得检索对话框结果的风险太大。对ShowDialog()调用使用 using 语句非常容易,在关闭窗口之前,该调用不会返回。