我在非模态状态下显示禁用的表单时遇到一些问题。这是示例代码:
public partial class Form1 : Form
{
// ....
private void button1_Click(object sender, EventArgs e)
{
try
{
Form2 form = new Form2();
form.Enabled = false;
form.Show(); // works, but form has no owner
// form.Show(this); // gives an System.InvalidOperationException
// ...
// ... my program here shows a message box, ask user for something
// ... while 'form' is shown in the background
form.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
知道为什么 Show()
(没有参数)有效,但 Show(this)
给出了一个异常(exception)吗?在我的场景中,form
必须知道它的所有者才能正确显示,因此我可以执行以下操作:
form.Enabled = false;
form.Owner=this;
form.Show();
但这真的是一个好的解决方案吗?
编辑:感谢您的快速回答。看来我们真的在这里发现了框架中的错误。尽管有您的建议,但我想我会坚持我的解决方案,因为在“显示”之后禁用表单会给用户带来难看的可见效果。
最佳答案
这是一个经典的剪切和粘贴错误。看起来他们复制了 ShowDialog() 的代码,将禁用的表单显示为对话框确实是无效的。用户将被卡住,无法再做任何事情。但是他们忘记删除 Show() 方法中的测试。只需在 Show() 调用后禁用它即可。
关于c# - Windows.Forms,显示非模式状态下的禁用表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2094930/