2009-08-25 42 views
4

我有一個在設計器中導致異常的功能。如果設計者加載它,我可以避免調用該函數嗎?有沒有比嘗試抓住更好的屬性?c#隱藏設計器的功能

一些更多的細節: 我的意思是視覺工作室設計師的勝利形式。我的表單正在使用初始化時調用LoadProject()的signleton。現在我想避免設計者調用LoadProject()函數。

+0

哪位設計師 - Windows窗體設計師?設計師要求哪種方法/功能? – 2009-08-25 17:41:27

+0

請詳細說明。 – 2009-08-25 17:45:10

+0

同意。如果您提出的問題既詳細又具體,我會給你一個+1抵消。 – 2009-08-25 17:47:41

回答

1

有檢測你是否是在設計模式的幾種方法:

  • 檢查控制的DesignMode屬性的值。這在控件的構造函數中不起作用,因爲只有在控件已經被定位的情況下它纔會返回true,直到控件創建完成纔會發生。它還有一個bug,其中自定義控件內的自定義控件將始終返回假
  • 檢查當前應用程序的路徑是否包含使用Application.ExecutablePath.ToLower().IndexOf("devenv.exe")devenv.exe。如果是,則該控件將由Visual Studio實例化。有點可怕,但它有效。
  • 檢查LicenseManager.UsageMode爲值LicenseUsageMode.Designtime(有關更多詳細信息,請參閱my answerDetecting design mode from a Control’s constructor)。請注意,這可以在構造函數中工作。

在任何這些檢查中包裝對您的函數的調用應該可以解決您的問題。

2

假設這是WinForms - 您可以檢查您是否正在使用DesignMode,並且只是立即返回您的函數。

有一些複雜性,完全解釋in this article包括一個解決方案。

1

你可以嘗試尋找this article on the MSDN有關使用的designMode財產。這可能會幫助你。您可以將引發異常的代碼封裝在條件中,以避免設計時出現代碼。

請注意,這將不能在構造函數中工作,因爲設計師必須實例化對象,然後設置屬性。