2012-07-25 65 views
4

我主要是後端開發人員,但我正在投入前端設計。我只在應用程序中構建一個面板(表單)。我必須根據用戶爲以前的參數選擇什麼來動態地添加/刪除表單中的其他項目。例如,面板頂部將出現客戶下拉菜單。我需要能夠配置哪些其他下拉菜單將在用戶進行選擇後顯示。我將至少有90種不同的配置。每個配置將有大約50個參數。在C#中處理這種情況的最佳方式是什麼?創建動態用戶界面?

我公司的某個人建議爲每個配置使用一個新表單,因此我已經看到有人說要使用用戶控件,還有人說要動態地將控件放入列表中並以這種方式生成內容。其中一些建議似乎是反直覺的...

有人可以建議一個「正確」的方式來做到這一點嗎?爲了說明這一點,我以前只編寫過一個表單,而且非常簡單。 (這是使用.NET 4.0的桌面應用程序)

編輯:這是的WinForms

+0

既然你已經關閉了這個,那你一定覺得沒有其他人會用變化的信息去定製一個面板嗎?我覺得這很令人驚訝。我原以爲有這樣的最佳做法。 – Brandon 2012-07-30 15:03:53

回答

0

這是的WinForms或WPF?

無論如何,你在設計器中做的任何事情,你可以在運行時在你的代碼中完成。添加控件只是創建新的對象和分配屬性:

的WinForms:

Button btn = new Button(); 
btn.Name = "Dynamic Button"; 
btn.Id = "DynButton" 
btn.Width = 50; 
btn.Click = {...}; 
[...] 
panel.Controls.Add(btn); // panel is a parent container control. You have to have a parent for you button. 

等 WPF幾乎是相同的 - 控制,家長,集裝箱等

你的情況,你可能有一組最初隱藏的面板裏面的所有東西,並顯示/隱藏它們取決於你的流程邏輯。

祝你好運!

0

當設計一個需要大量組件的表單時,您可以使用各種方法,這些方法將在您找到時獲得所需的結果。縱觀一些possibilites的...

方法1:爲每個配置

這不是一個壞主意,因爲用戶做出選擇之後,你可以創建所需形式的新實例創建單獨的形式,但建立所有單獨的表格需要一些時間,但並不困難。

方法2:針對每個配置

這工作類同方法一個除了你最初將隱藏所有的面板,然後顯示用戶選擇面板創建多個面板。您可以提前創建面板並隱藏或顯示,也可以在運行時以編程方式執行。 (如果以編程方式執行面板,那麼肯定不適當的是,在我看來,許多面板都裝滿了部件)

方法3;以編程方式創建所需組件

您可以編寫代碼以根據用戶選擇生成所需的組件。

例子:

if(comboBox1.SelectedIndex == 0) 
{ 
    ComboBox selection1 = new ComoboBox(); 
    selection1.Location = new Point(XXX,YYY); //Set location 
    //You can add the events for the combobox, set up the properties 
    form1.Controls.Add(selection1); //Add the component to the form or panel that you want it displayed on 

    //Write code to dynamically create next object(s).... 
} 
else if (comboBox1.SelectedIndex == 1) 
{ 
    //Programmatically create components for selection2 
} 

這些我覺得方法1是最容易的,因爲它只是放置組件的形式,但是這將是費時。在我看來,編程方式可能是最優雅的,只要你把代碼組織得很好以適應不同的可能性,並且你沒有多種形式或面板來處理。你只會搞亂組件。但是,以編程方式創建組件時,分配屬性也很耗時。

我不是100%確定這樣做的最正式的方法是什麼,但這些只是一些想法。

希望這會有所幫助。

0

不是一個C#人,我不能給你示例代碼,但根據以往的經驗,這聽起來像你正在尋找的是Decorator Pattern

裝飾模式將允許您在運行時動態創建對象而不是編譯時間。您可以使用它來根據以前輸入的內容創建您的表單/按鈕/任何所需內容。