C# VisualStudio Designer创建的控件是否具有动态生成控件的常见做法?

C# VisualStudio Designer创建的控件是否具有动态生成控件的常见做法?,c#,user-controls,dynamically-generated,C#,User Controls,Dynamically Generated,我正在开发一个库存管理程序。通过该程序,管理员可以将项目添加到库存中。由于这是程序的一项基本功能,因此它将显示在主窗体中,并且不会隐藏在菜单中 非管理员用户应无法看到此功能。隐藏它的最简单选项是将其可见属性设置为假。这种方法的问题是我将特性加载到内存中,而我根本不需要它。我正在寻找一个创造性的解决方案。有人会说这是过早的微观优化(我们都知道),但对我来说,这更多的是编写正确的代码,而不是黑客 因此,我创建了一个方法,可以动态生成该特性及其所有组件,如果管理员登录,就会调用它。虽然这种方法解决了内

我正在开发一个库存管理程序。通过该程序,管理员可以将项目添加到库存中。由于这是程序的一项基本功能,因此它将显示在主
窗体中
,并且不会隐藏在菜单中

非管理员用户应无法看到此功能。隐藏它的最简单选项是将其
可见
属性设置为
。这种方法的问题是我将特性加载到内存中,而我根本不需要它。我正在寻找一个创造性的解决方案。有人会说这是过早的微观优化(我们都知道),但对我来说,这更多的是编写正确的代码,而不是黑客

因此,我创建了一个方法,可以动态生成该特性及其所有组件,如果管理员登录,就会调用它。虽然这种方法解决了内存问题,但它不允许我使用VisualStudioDesigner,我必须编写功能设计的每一行

我想到的解决方案是将特性提取到
用户控件中,这样就可以通过设计器进行设计。前面提到的方法实例化它并将其添加到
表单中。我对这个解决方案感到不舒服,因为它使用了一个
UserControl
,目的与原来的不同:

此外,使用
UserControl
这与我的程序架构相冲突。以关键的方式改变体系结构现在是不现实的,特别是真正的问题是滥用
用户控制
,而不是体系结构

每个
表单都有自己的命名空间。例如,主
表单
命名空间是
main
表单
是使用构建的,因此每个名称空间都有一个
模型
视图
演示者
类。每个
表单
都有一个子命名空间,用于
UserControl
s。因此
Main.UserControls
将包含专门为
Main
使用而创建的
UserControl
s<由多个
表单
s共享的code>UserControl
s位于不同的命名空间中,在命名空间层次结构中处于较高的位置

由于
UserControl
的定义,因此
Main.UserControls
命名空间应包含小型、有用的
Control
s(例如具有预定义值的
ComboBox
),而不是连接到数据库的整个程序功能。仅仅通过查看代码,另一个程序员可能会发现很难理解为什么会有这个
UserControl

此外,由于此
UserControl
包含到数据库的连接,因此需要使用MVP。突然间,
Main.UserControls
中出现了两个非-
UserControl
的意外额外类

是否有更好的、通用的解决方案


注意:
我不是在征求意见,只是问是否有众所周知的惯例。

没有,没有惯例。事实上,这一要求相当奇特。例如,有一个控件-
PropertyGrid
-作为多个对话框的替代品。@Sinatr-您能详细说明一下吗?如果我能理解这个问题,我会回答。这个问题的措辞过于宽泛,包含许多可以单独回答的部分。同样,
PropertyGrid
可以替代设置表单,它是动态的,非常灵活。但是数据库呢?最有价值球员?像“另一个程序员可能会发现很难理解”这样的担忧只会增加不确定性。除非您更好地阐明您的需求,展示您现在拥有的以及为什么它对您不起作用(尽管这是一个相当大的问题),否则回答是不可能的。我的目标是编写好的代码。好的代码通常由另一个程序员理解它的能力来衡量。由于程序有一个非常清晰的架构,破坏它可能会给其他程序员带来混乱,这表明代码不好。代码使用数据库将项目插入到库存中。为了分离可视化设计逻辑和数据逻辑,我使用MVP。因此,程序中的每个表单至少由三个类组成,而不是一个。