我正在创建一个实用程序,它需要足够灵活,以便使用用户输入的不同类型的数据。不只是不同的数据,因为一个用户可能输入"Rory Gallagher“、另一个"Merle Travis”、另一个“路易斯·乔丹”和另一个"Gatemouth“。
更像是一个用户输入"Rory Gallagher“,另一个用户输入"42”,另一个用户输入日期(如1956年9月8日)和ID值(如"00034872184")。
所以问题出在GUI上:我如何“换出”表单中提示用户输入的部分?创建几个99%相同的实用程序似乎有点夸张。但一些“版本”的应用程序只需要一个“输入一些值”标签和一个TextBox,而另一个可能需要提示他们输入两条甚至更多的信息。
我不希望在表单上有一个调用另一个表单的“输入数据”按钮,因为当用户只需要输入一小部分信息时,这似乎很奇怪。
我认为在我的未来,策略模式可能会出现,但GUI部分仍然是个难题。如果我们使用WPF会更容易,但我们不是。我想我仍然可以保留表单的一部分,足够大以包含“最大”的场景,但这是最好的方法吗?
更新
我尝试了下面的建议:
我在表单中添加了一个面板,并通过Add | UserControl创建了一个用户控件,并尝试了以下操作:
panel1.Controls.Add(UserControl1);
UserControl1.Dock = DockStyle.Fill; ...but遭遇了巨大的失败("'PlatypiRUs.UserControl1‘是一个’类型‘,但像’variable‘一样使用“”,并且“非静态字段、方法或属性’System.Windows.Forms.Control.Dock.get‘需要一个对象引用”)
再次更新
现在取得了史诗般的成功:
UserControl1 usr1 = new UserControl1();
panel1.Controls.Add(usr1);
usr1.Dock = DockStyle.Fill;发布于 2012-06-06 21:37:03
我建议动态地将不同的用户控件加载到表单的该部分。为了简化设计,您可以将一个面板放在动态控件所在的位置,然后在打开停靠的情况下将其加载到该面板中,以便填充整个面板。然后,您只需为所需的每组数据输入字段创建一个单独的用户控件。例如,如果您有一个名为pnlCustom的面板控件,则可以在窗体的load事件(或任何有意义的地方)中执行以下操作:
UserControl1 customControl = new UserControl1();
pnlCustom.Controls.Add(customControl);
customControl.Dock = DockStyle.Fill;发布于 2012-06-06 21:57:30
在我看来,这是一个构建器模式。
基本上,可以将您的表单看作一个“两步视图”,这意味着:
下一步是对数据进行明显的处理。为此,您有一个抽象的处理器,然后每种情况都有具体的实现(类似于上面的第一步构建器)。
现在很明显,UI构造和数据处理可以一一对应,这意味着情况是一个工厂,它生产视图构建器和数据处理器。
伪代码将如下所示:
// construct the view.
var factory = Situation.GetCurrentSituationFactory(); //abstract factory.
var uiBuilder = factory.GetUIBuilder(); //abstract builder
var structure = uiBuilder.GetFormStructure([context goes here]); //build view definition
var viewParser = Platform.GetViewParser(); //abstract builder (step 2)
viewParser.ConstructForm([context with form goes here]); //build form UI
// later on, process the input data.
var input = viewPrser.GetInput([context with form goes here]); //input definition
var dataProcessor = factory.GetDataPocessor(); //strategy
dataProcessor.Process(input); //execute processing strategy此外,这不会与动态控件或要用来构造窗体的任何其他内容冲突。只要正确实现您的抽象关注点即可。
https://stackoverflow.com/questions/10915293
复制相似问题