2010-01-06 73 views

回答

7

還有一個巨大的區別組件和控制。組件是一個非常簡單的類,它有3個成員的設計時支持,6個成員的運行時支持,就這些。您可以在表單上放置一個,以便可以編輯其屬性。它在運行時所做的任何有用的操作都必須由組件本身來實現,而Windows Forms沒有任何幫助。

控件通過添加允許其具有良好定義的運行時行爲的成員來擴展Component,最明顯的是通過包裝本機Windows窗口。你可以看到它並點擊它。這份大型工作需要數百名成員,儘管其中大部分成員在設計師中都看不到。

將控件轉換爲組件但仍保留控件特性是可能的。 ToolStripItem可以做到這一點。但是,它需要大量的代碼,因爲您必須替換Windows窗口提供的每個功能。這很難,即使對於微軟來說,ToolStripItem類也有很多bugz。您從中獲得的唯一好處是您可以避免分配窗口句柄。有時可能會引人注目,Windows是昂貴的對象,可能會讓代碼運行緩慢。而且你堅持一個窗口的工作方式,例如對透明度的支持不佳。

使用Component支持透明度不是問題,它只是多層的油漆層疊在一起。然而,你必須提供控制所做的一切。

到此爲止,這已經完成了。這是WPF的確切模型。 WPF應用程序(通常)只有一個本地窗口句柄。其他的東西都是由WPF渲染引擎繪製的。因此支持透明度效果並不困難。任何其他的花裏胡哨的東西,比如旋轉的控件,你都無法獲得本地窗口。或者一個瀏覽器。

如果你想堅持WF,詳細解釋你需要什麼樣的透明效果。有很多方法可以獲得,這取決於你想要做什麼。 Fwiw,StackOverflow的一個很好的問題就是一個很好的答案。

+0

@nobugz先生,我需要這個,因爲 我做了一個名爲SetControls(control controlName)的函數,它只將控件作爲參數。而我想要傳遞tooltipcontainer中的tooltripbutton.Function SetControls()將toolstripContainer視爲控件,但不考慮tooltripbutton作爲控件,並且如果將toolstripbutton作爲控件傳遞,則會出現錯誤。那麼,我該怎麼做?我也單獨發佈這個問題。 – Harikrishna 2010-01-06 09:38:33

+0

我已經建議你使用ToolStripItem參數對SetControls進行另一個重載。 – 2010-01-06 10:06:08

+0

@nobugz它的任何其他解決方案,先生? – Harikrishna 2010-01-06 10:07:24

0

您可以在實現IContainer接口的任何對象中託管組件。

+0

對不起,你能詳細解釋一下嗎? – Harikrishna 2010-01-06 08:58:44

+0

組件通常是公共語言運行時事物的存儲空間......它們通常用於中介語遷移。例如將一個變量的值從一個C#應用程序發送到一個Java應用程序(它們在運行時都使用CLR,因此Component基本上是唯一的方法)如果您需要傳輸控件,它可能會有點困難,因爲渲染在轉換爲CLR之前完成控制 – GxG 2010-01-06 09:40:49

+0

放置在工具欄中的tooltripbutton是否是組件? – Harikrishna 2010-01-06 09:44:02

相關問題