我在显示非模态状态下禁用窗体时遇到了一些麻烦。下面是示例代码:Windows.Forms,显示非模态状态下的禁用窗体
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)
给出了一个例外?在我的情况下,form
必须知道正确显示它的主人,这样我就可以做到以下几点:
form.Enabled = false;
form.Owner=this;
form.Show();
,但是这真的是一个很好的解决方案?
编辑:感谢您的快速解答。似乎我们在这里的框架中确实发现了一个错误。尽管有您的建议,但我认为我会继续使用我的解决方案,因为在'显示'给用户带来丑陋的可见效果后禁用该表单。
这或称为显示(this),然后禁用它是我能想到的唯一两种方式 – 2010-01-19 16:21:20
我的IDE说:“未启用的窗体不能显示为模式对话框。将窗体的enabled属性设置为true然后打电话给Show。“ – 2010-01-19 16:22:02
@Chris:我认为使用'Show'会在非模态状态下显示Form,只有ShowDialog会在模态状态下执行它,所以在哪里捕捉? – 2010-01-19 16:24:07