2011-04-25 78 views
4

我有一個UserControl,它使用了我的窗體上可用的一些公共屬性,位於Paint的頂部事件UserControl,我參考控制的Parent並將其轉換爲我的Form的類型。無法投射'System.Windows.Forms.Form'類型的對象來鍵入'Project.Form1'

var _parent = (Form1)Parent; 

此代碼然而,在設計視圖,則會引發錯誤,而我在的地方UserControl看到的是一個白色的箱子在這篇文章的標題顯示錯誤。堆棧跟蹤直接導致這一行代碼。

現在,我已經修正了這個錯誤重新路由通過物業這個轉換在我的用戶

public Form1 ControlParent 
    { 
     get 
     { 
      if (Parent != null) 
      { 
       return (Form1)Parent; 
      } 
      return null; 
     } 
    } 

這是什麼樣的有點多的,只是打破了設計視圖..任何其他想法?

+1

如果您在設計時不關心控件的顯示,只希望錯誤消失,則可以在用戶控件的Paint事件中使用「DesignMode」屬性。if(!DesignMode){ ...代碼...} – Preets 2011-04-25 16:13:42

+0

@Preets哇,這也是非常有用的。你應該發佈這個答案,但是謝謝你的輸入= D – 2011-04-25 16:17:37

回答

4

基於代碼,它看起來像你的孩子Control實例已經可以處理ControlParentnull。因此最簡單的解決將是隻是做以下

public Form1 ControlParent 
{ 
    get 
    { 
     return Parent as Form1; 
    } 
} 

注:一般情況下這是一個壞主意,取決於Control,其中一個具體類型的Parent。它可以防止它被重新託管在其他控件中,並且可以打破設計師經常爲了提供不錯的設計體驗而經常使用的類型。如果您必須依賴像Parent這樣具有特定類型的值,請確保有一個回落計劃,該計劃在不同類型的面前不會崩潰。

+0

上面的代碼仍然會打破設計師。這不是運行時問題。出於某種原因,我的Form1的設計視圖無法顯示UserControl,因爲該行代碼。就像我上面所說的,代碼的工作原理非常奇妙,但設計視圖受到了影響。 – 2011-04-25 16:02:49

+0

@Kyle,如果是這樣的話聽起來像你的子控件無法處理,如果'ControlParent'返回一個'null'值。它必須能夠這樣做 – JaredPar 2011-04-25 16:04:19

+0

@JaredPar控件CAN爲Parent處理空值。演員陣容是個問題。當設計視圖嘗試顯示該控件時,它必須調用onPaint事件,這會導致該強制中斷。我不知道爲什麼,這就是我想要找到的。 – 2011-04-25 16:06:12

0

您是否檢查過第一個代碼中的父代是否爲空?

0

您可以嘗試設置窗體的所有者,然後以您通過父項屬性嘗試的方式訪問該屬性。

相關問題