2015-09-26 22 views
5

在C#(和Visual Basic),你可以添加一些非UI組件(那些沒有從System.Windows.Forms.Control繼承)直接從窗體設計器。這些組件的例子是System.Windows.Forms.FolderBrowserDialogSystem.Windows.Forms.Timer爲什麼要從設計器插入非UI的Windows.Forms組件?

但是,什麼是從添加非UI控件與UI設計師,而不是直接從代碼實例化他們的利益?這背後有一個基本原理嗎?

+0

如果我正確理解你的話,InitializeComponent()包含剛刪除的東西的代碼 – brykneval

+0

@brykneval我知道設計者聲明和初始化組件的位置,但我不明白使用設計器的好處非UI組件。 – Wizard79

+1

您可以檢查實現'IDisposable'的對象,設計師是否在'Disposing(bool disposing)'中添加了Dispose()'調用。或者找一個關於變量名的所有引用,看看是否添加了任何代碼(除了明顯的)。 – Loathing

回答

6

我想用設計師的非UI組件至少有以下好處:

設計時支持

一個你在Windows窗體有最強大的東西是用設計師的能力設置組件。
即使Timer不是UI組件,但您可以設置其屬性,如在設計的時間間隔。這適用於許多其他組件,如BindingSource,ErrorProvider,...您可以使用非常友好的屬性網格和類型編輯器以及類型轉換器在設計時配置屬性。

  • 當您想爲其他控件配置依賴屬性時;例如通過將BindingSource添加到設計器,它使數據綁定變得非常簡單。
  • 當您需要使用擴展器供應商,如HelpProviderTooltip,因爲它們與其他控件,這是很容易在設計模式對其進行配置。
  • 當你需要配置像DataSourceDataMember特性,它是非常友好的使用設計器和使用大屬性網格功能。
  • 組件將添加爲類級別字段,您可以使用deigner將它們公開。
  • 當你需要使用的FormLocalizable功能爲您的組件,它用設計師的完全可用。
  • 當您需要簡單地添加或刪除事件處理程序時,您可以使用屬性網格執行此操作。

標準代碼

如果你看看設計器生成的代碼,你會看到:

    的組件,支持 ISupportInitialize
  • 生成的代碼使用它們BeginInitEndInit
  • 生成的代碼對於組件,將this.components傳遞給構造函數,然後在使用它時使用它Dispose

如果您不需要設計時支持,並且爲組件編寫標準代碼,那麼在代碼中使用主題完全可以。

相關問題