2012-07-25 60 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

装饰模式将允许您在运行时动态创建对象而不是编译时间。您可以使用它来根据以前输入的内容创建您的表单/按钮/任何所需内容。