2012-02-06 41 views
1

我有一個C#WinForm程序,實質上是一個美化的文本解析器。它需要一行十六進制數,並根據提供給我的規格將其轉換爲人類可讀的信息。我有一個tabcontrol用於顯示信息的多個標籤頁。這些標籤中的幾個標籤是相同的,但是需要基於解析出的文本行在不同的標籤上,如果該行是'A'類型的,則它顯示標籤'A'上的信息,如果它是'B'類型的,它顯示在標籤'B'等。跨多個標籤頁重複使用控件(即文本框)

我開始注意到這個問題,我有很多文本框和其他控件跨越所有這些標籤頁,我相信它會影響性能。我相信我現在已經在150多個文本框的範圍內,關於相同的複選框等等。

我的問題是,有沒有一種方法可以在多個標籤頁上重複使用一頁控件,並讓它們根據標籤顯示不同的信息,所以我可以減少100多個控件並簡化程序本身?

回答

1

閱讀所添加的部分,更清晰一點,因爲我漫無目的。

有幾種方法可以在體系結構上解決這個問題。基本的概念就是不再將「標籤頁」看作是一種物理概念,並且從邏輯上開始思考它。作爲一個合乎邏輯的概念,在您的實現中,選項卡頁面是一組控件,其中一些是獨特的,其中一些是常見的(或者對於多個選項卡通用)。

在純動態系統中,您可以填寫「控件」並動態繪製,具體取決於用戶點擊哪個「標籤」。這意味着你並不需要使用選項卡控件。而是根據顯示給用戶的信息繪製「標籤頁」。

另一種選擇是保留已經佈置在「標籤頁」上的唯一「控件」,並將可以添加到非唯一控件中的容器保留爲。這需要一些計劃來確定哪些控件需要顯示在哪個頁面上,以及靜態佈局(控件放置在選項卡上)和動態交織方式。換句話說,一點計劃可以爲你節省很多的痛苦。

無論採用哪種方式,無論使用多少「標籤頁」,都需要填充一次控件。

補充:因爲這是winforms,所以你必須稍微改變一下你的思維範式。如果你是一個webforms開發者,你已經考慮過容器。

一個選項是製表符的策略模式。該策略包含在頁面上繪製「標籤頁」及其位置和大小所需的控件。當一個人點擊一個標籤時,你會進入「存儲桶控制」並根據所使用的「標籤」(策略)動態添加。您甚至可以將標籤頁傳遞給策略,並將其動態地繪製在那裏。

整個答案的要點是做一次工作,然後根據需要顯示。

+0

我很感激你的意見。謝謝! – Leaddore 2012-02-07 15:56:54

0

我不認爲你可以重新使用這樣的控件,但你可以肯定地創建控件時,第一次顯示選項卡,而不是一次。

+0

控件最終是一個類(一個對象),因此您可以控制它的使用方式以及它如何顯示給用戶。在標籤頁的約束條件下,這有點困難,但是您可以動態地將控件添加到頁面(馬虎)或其他類型的容器(整潔者,如面板,標籤頁等)。 WinForms使這有點棘手,因爲一般的WinForms開發人員並不像Web開發人員那樣想。:-) – 2012-02-06 18:33:13