我正在设计一个程序,但我遇到了一个UI问题。我想拥有一堆不同的屏幕,但我不想使用20种不同的形式(我很确定这是不好的做法),而且我不想立即放下所有控件设计师,因为事情变得混乱。我有一个在启动时运行sub的想法,它会动态生成我需要的所有控件以及所有正确的坐标和设置,然后将特定屏幕所需的控件转储到Panel中。然后我返回一个面板的ArrayList,并在需要该屏幕时拉出正确的面板以附加到表单。唯一的问题是我的表单不会对其控件有任何隐含的知识,所以我假设我不能使用WithEvents / Handles。*关键字来声明表单类中的处理程序(这就是我的' d宁愿做)。我知道这听起来有点复杂;我还在试着理解我在说什么:)如果有人对什么方式更好有任何想法,或者有一个我没有遇到的更好的方法,请告诉我。
答案 0 :(得分:3)
您所谈论的是设计器(静态)与程序化(动态) UI生成。这是不太受欢迎的圣战,因为双方都有粉丝。您可以使用两种方法的事件等(因为设计者实际上最终会生成代码)。由你来决定。程序化方法有一些好处,但通常需要更多时间(尤其是第一次)。
Charles Petzold是程序化UI创建的知名粉丝,你可以从this book学到一些技巧(但一般来说,关于C#的坏书,恕我直言)。
答案 1 :(得分:2)
我认为答案是两者兼而有之。拥有20个表单是一个维护噩梦,并且动态生成一切都很糟糕。
尝试弄清楚20设计中的常见功能。他们都使用3列布局吗?他们都使用一套通用的控件吗?等
然后创建这些共同元素。对于布局,在表单上放置一些容器控件,并让它们按照您想要的方式调整大小。如果可以,可以创建一些自定义控件来显示或处理常见的数据项。
然后,您可以将自定义控件动态添加到布局中。
事件处理实际上是最简单的部分。您可以编写事件处理过程,然后使用AddHandler
将事件从动态创建的控件链接到预先编写的代码。
答案 2 :(得分:0)
我会选择20种不同的形式。不同的屏幕,不同的形式,没有错。
它为您提供了所有的设计时间优势,并避免了在代码中对齐和排列所有内容的地狱,这将是一个绝对的维护噩梦。