我在顯示非模態狀態下禁用窗體時遇到了一些麻煩。下面是示例代碼: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