创建动态用户界面?

时间:2012-07-25 12:51:41

标签: c# user-interface

我主要是后端开发人员,但我正被置于前端设计中。我正在应用程序中构建一个面板(窗体)。我将根据用户选择的以前参数动态添加/删除表单中的其他项目。例如,面板顶部会有一个客户下拉列表。我需要能够配置用户进行选择后将显示哪些其他下拉菜单。我将至少有90种不同的配置。每个配置都有大约50个参数。在C#中处理这种情况的最佳方法是什么?

我公司的某个人建议为每个配置使用一个新表单,因为我看到人们说要使用用户控件,而其他地方则说要动态地将控件放在列表中并以这种方式生成内容。其中一些建议似乎违反直觉......

有人可以建议一种“正确”的方法吗?从透视角度来看,我之前只构建过一个表单,而且非常简单。 (这是使用.net 4.0的桌面应用程序)

编辑:这是在Winforms中

3 个答案:

答案 0 :(得分: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实际上是相同的 - 控件,父母,容器等。

在你的情况下,你可能有一组最初隐藏的面板,其中包含所有内容,显示/隐藏它们取决于你的流逻辑。

祝你好运!

答案 1 :(得分:0)

在设计需要大量组件的表单时,您可以使用各种方法,以便在您发现时获得所需的结果。看看一些可能性......

方法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将是最简单的,因为它只是将组件放在表单上,​​但这将是耗时的。在我看来,以编程方式可能是最优雅的,只要你为不同的可能性保持代码组织良好,并且你没有多种形式或面板来处理。你只是搞乱组件。但是,以编程方式创建组件时,分配属性也很耗时。

我不是百分之百确定最正式的做法是什么,但这只是一些想法。

希望这有帮助。

答案 2 :(得分:0)

不是很多C#家伙,我不能给你示例代码,但根据过去的经验,听起来你正在寻找的是Decorator Pattern

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