5

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

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

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

编辑:这是在 Winforms

4

3 回答 3

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

我不是 100% 确定最正式的方法是什么,但这些只是一些想法。

希望这可以帮助。

于 2012-07-25T13:18:09.483 回答
0

这是 WinForms 还是 WPF?

无论如何,您在设计器中所做的任何事情,都可以在运行时在代码中执行。添加控件只是创建新对象并分配属性:

赢表格:

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 几乎是相同的 - 控件、父级、容器等。

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

祝你好运!

于 2012-07-25T13:01:22.653 回答
0

作为一个 C# 人,我不能给你示例代码,但根据过去的经验,听起来你正在寻找的是Decorator Pattern

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

于 2012-07-25T17:39:34.467 回答