创建动态用户界面?

5
我主要是一名后端开发人员,但我现在需要进行前端设计。 我将在应用程序中构建一个面板(表单)。 根据用户选择的先前参数,我需要动态添加/删除表单中的其他项目。 例如,面板顶部将有一个客户下拉列表。我需要能够配置用户选择后哪些其他下拉菜单将显示。 我至少需要90个不同的配置,每个配置大约有50个参数。 在C#中处理这种情况最好的方法是什么?
我的公司有人建议为每个配置使用新表单,在SO上我看到人们说要使用用户控件,而其他地方则建议将控件动态放置在列表中并以此生成内容。 有些建议似乎不合理...
有人能提出一种“正确”的方法吗?换句话说,我只构建过一个非常简单的表单。(这是一个使用.net 4.0的桌面应用程序)
编辑:这是Winforms。

既然你关闭了这个问题,那就意味着你认为没有其他人需要自定义一个带有变化信息的单面板?我觉得这很令人惊讶。我本以为会有某种最佳实践来处理这个问题。 - Brandon
3个回答

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

在设计需要大量组件的表单时,有各种方法可以使用,以达到所需的结果。看看一些可能性...

方法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
}

在这些方法中,我认为第一种方法最简单,因为它只需要将组件放置在一个表单上,但是这会很耗时。在我的看法中,以编程方式实现可能是最优雅的,只要您为不同的可能性保持良好的代码组织,并且您没有大量的表单或面板需要处理。您只需要处理组件。然而,在以编程方式创建组件时,分配属性也可能很耗时。

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

希望这有所帮助。


0

我不是很擅长C#,所以无法给你提供示例代码,但基于过去的经验,听起来你需要的是装饰器模式

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接