动态表单控件

时间:2020-03-05 18:47:33  来源:igfitidea点击:

使用C2.0实施动态表单控件的最佳方法是什么?

我需要为每个数据对象提供一组控件,所以我应该手动进行设置并在增加最大值时进行布局,还是有更好的方法?

解决方案

回答

你所说的动态是什么意思?是否为数据集中的每个数据行设置了一组新的固定控件?然后使用包含控件的" UserControl"。

还是我们是说要根据数据布局为用户提供一组自定义控件,例如每列一个" TextBox"?

回答

是的,我发现手动布置控件(将控件的Top属性增加控件的高度再加上边距)是合理有效的。

另一种方法是将控件放置在Dock设置为Top的面板中,以使每个连续的面板都与上面的面板对接。然后,我们可以切换各个面板的可见性,并且下面的控件将快速对齐以填充可用空间。请注意,这可能有点不可预测:显示停靠的隐藏面板有时可能会更改其相对于其他停靠控件的位置。

回答

我们可以使用具有自动布局的面板,例如FlowLayoutPanel和TableLayoutPanel。

不幸的是,只有2个面板具有开箱即用的自动布局功能,但是我们可以创建自定义布局面板。

我建议我们阅读以下文章:

如何:为数据输入创建可调整大小的Windows窗体

演练:为数据输入创建可调整大小的Windows窗体

另一个选择是使用WPF(Windows Presentation Presentation)。
WPF非常适合任务。
WPF控件可以托管在WinForms应用程序中,因此我们不必完全切换到它。

回答

嗯,这就是我们现在在项目上正在做的方式。但这仅在简单情况下有用。我建议我们为更复杂的情况使用某种模板。

例如,我使用了Reflection来将某种类型的控件映射到旧项目中域对象上的某种属性。

我们可以尝试使用t4从模板生成代码,有关简单示例,请参见Visual Studio中的T4模板以进行代码生成截屏。我们可以将其应用于WinForms。

DevExperience也有一个不错的(昂贵的)框架,请参阅DevExpress eXpressApp框架吗? 。

回答

@Sam我知道这个问题与Windows Forms有关,但是我们绝对应该开始关注WPF。在带有DataTemplates和TemplateSelector的WPF中,这种情况真的很容易。