2010-11-22 38 views
1

充其量,我是一個UI新手,但我是一個相當不錯的面向對象開發人員(如果我自己不這麼說)。我很困惑如何與設計師合作。我正在開發一個Windows窗體應用程序。我有一個控制(TabPage),我從System.Windows.Forms.TabPage派生出來,我想要放在System.Windows.Forms.TabControl控件上。如何在我的Windows窗體應用程序中使用派生控件

public class MyTabPage : TabPage 
{ ... } 

我不知道如何讓設計師使用我的控制。

一位開發人員看着我,因爲我建議添加更多信息。

我已經原型化了一個WinForms應用程序。該應用程序有一個TabControl,其上有三個標籤頁。每個TabPageSplitterControl在分離器的每一半中都有一個DataGridView控制。兩個DataGridView控件構成我們需要編輯的一些數據的主 - 細節視圖。我爲每個DataGridView控件添加了一堆事件處理程序,並且每次將處理程序代碼放置在窗體中。該表格變得非常擁擠,並希望使用面向對象技術來清理事情。

我想現在重做原型,並且因爲每個TabPage在行爲上都是相同的,所以我想用OO來抽象出一些複雜性。這就是我在設計師方面缺乏經驗的地方。必須有一種方法來使用設計器來製作比我的原型更復雜的東西。

回答

0

已經有一段時間了,但我想我會回答這個問題。

我能夠通過分割控制來獲得我想要的OO實現。控制與原型幾乎相同。然後,我創建了一個帶有派生類的控件聯編程序類僱傭集,以包含我需要的特定行爲。該控件具有對活頁夾基類的引用,並根據需要調用活頁夾功能。派生的綁定器根據需要覆蓋屬性和方法。幾乎是一本教科書OO解決方案。

我磕磕絆絆的地方在於認爲我需要控制僱主。

感謝大家的幫助。當我問這個問題時,我受到了一些壓力。從那以後的幾個月中我學到了多少東西,真是太神奇了。

1

用戶控件

只需創建一個包含控件的用戶控件。然後它將在Visual Studio的ToolBox窗口中可用。

詳情Understanding the User Control Designer ...

的用戶控制是類似於任何其他 類,但隨着加入能力 被放置在工具箱和一個表單上顯示 。

該教程與Visual Studio 2010有一點不同,但我相信您會通過它。


TabPage的控制

對於TabPage的控制,你不能用它獨立的設計師。它必須是TabControl的一部分。

TabControl構建爲包含TabPage控件。如果您使用設計器來添加/刪除任何TabPage,在後端它會執行「新的TabPage」,它不能確定它需要創建一個TabPage派生類的新實例。


其他建議

一個TabPage的僅僅是一個容器,爲什麼你需要重寫TabPage的控制我想不通。我知道你已經爲你的問題添加了一些信息,但你可能需要重新訪問,以便更好地理解。

由於TabPage是一個容器,因此應該創建一個包含SplitContainer和DataGridViews的UserControl。因此,您可以在每個TabPage上重新使用該用戶控件。

設計師只是對UI編程的補充,它不是強制性的。您可以在不使用設計器的情況下將UserControl添加到TabPage。

我可能不在這裏,如果有的話請提供更多的細節。您需要的視覺原型可能會有所幫助。

+0

我想出了這部分,並認爲很好。我創建了一個名爲MyTabPage的控件,派生自TabPage。當我在設計器中打開MyTabPage時,雖然我看不到如何添加(並排列)SplitContainer和DataGridView控件。然後我用SplitContainer控件嘗試了同樣的事情。同樣的事情發生......我不明白如何使用設計器來編輯我的派生控件。 – 2010-11-22 16:18:11

1

不幸的是,您的問題沒有真正實用的解決方案。你必須創建一個自定義的TabControl,並給它自己的設計器,以便它將創建派生類的實例,而不是默認的TabPage類。可悲的是,System.Design.dll中的TabControlDesigner類是內部的,無法從中派生。你必須寫一個完整的替代品。這很難,它是一個非常先進的設計師。您可以通過Reflector查看查看結果。

+0

那麼真正的UI開發人員如何開發他們的代碼呢?看起來設計師對於微不足道的應用程序來說很好,但對任何物質的應用都沒有用處。我想我很難買到。 – 2010-11-22 16:19:47

1

你並沒有真正改變TabPage的行爲,它畢竟只是一個容器:)。 TabPage和TabControl是相當緊密耦合的,他們可能應該是。你的「控制」應該放在TabPage上。因此,將您的用戶控件定義爲具有分隔符和兩個datagridview的面板,然後將您的用戶控件放在應用程序中的每個TabPage上。選項卡控制/頁面串聯仍將自動工作,並且您的自定義代碼將處於適當的控制狀態。

相關問題