2010-11-02 69 views
4

我不確定這是否允許,但我有一個主窗體調用另一個窗體與ShowDialog試圖調用另一個窗體相同。C#ShowDialog調用另一個ShowDialog

因此,舉例來說:

Form1的 - > form2.showdialog - > form3.showdialog

我得到一個錯誤在form3的ShowDialog的:

var ssscu = new SSS.SssTwainSimple.MainForm(); 
ssscu.ShowDialog(); 

這是錯誤:

{"Form showDialog tried to set an ineligible form as its owner. Forms cannot own themselves or their owners.\r\nParameter name: owner"}

我不知道我明白問題是什麼,我不允許打電話給我howdialog是一個對話框嗎?

感謝, Eroc

+0

添加MDI允許父母孩子的形式嗎? – brumScouse 2010-11-02 18:13:41

+0

這是因爲ssscu表單作爲負載所有者傳遞給另一個表單而造成的......我移動了這個表單並且工作正常。謝謝您的幫助! – ErocM 2010-11-02 19:09:18

回答

4

am I not allowed to call a showdialog from a form that is a dialog?

你肯定是允許的,這應該工作。

但我確實認爲創建一個名爲MainForm的對話框形式很奇怪。

我認爲這是由事件中發生的其他事情引起的。 mainForm在構造函數/ Load-event中做了什麼?

+0

這就是問題所在,程序員讓調用項目在負載中做一些事情。 +1!謝謝! – ErocM 2010-11-02 19:11:06

3

嘗試用.ShowDialog(this);

編輯取代.ShowDialog();我還沒有嘗試過自己,但是這是我開始尋找。

3

這是一個非常不尋常的例外。表單在被構造函數創建時已經擁有一個所有者。您沒有使用ShowDialog(所有者)覆蓋,因此Windows窗體必須爲它自己找到所有者。它找到完全相同的形式。這在技術上是可行的,但你必須寫一些相當奇怪的代碼。要診斷此問題,請將此代碼添加到表單中:

protected override void OnHandleCreated(EventArgs e) { 
     base.OnHandleCreated(e); 
    } 

並在其上設置斷點。如果我的猜測是正確的,這將在之前打破的ShowDialog調用。查看調用堆棧以查看創建該窗口的語句。

+0

+1,因爲它是真的......被調用的應用程序有錯。名稱是mainform,因爲調用它的wpf控件在一個項目中,而被調用的winform是另一個項目,兩者都在同一個解決方案中。 :) – ErocM 2010-11-02 19:11:50