【问题标题】:Generic Windows Form Template通用 Windows 表单模板
【发布时间】:2012-01-08 15:00:29
【问题描述】:

我正在创建一个通用的 Windows 窗体,它接受 T 并使用带有自定义属性的反射在运行时创建标签和输入控件。

例子:

class GenericForm<T>: Form where T : ICloneable<T>  
{  
}  

这里是表单代码的上一个问题的链接:SO Question

此表单可以接受以下实体类作为示例:

class Vehicle: ICloneable<Vehicle>  
{  
    public int Id { get; set; }  
    public int Name { get; set; }  
    public int Description { get; set; }  
}  

您可以想象,表单背后的魔力将使用反射来确定数据类型、验证标准、要使用的首选控件类型等。

与其重新发明轮子,我认为如果有人知道这样的框架,那么值得一问。不用说,我正在寻找简单的东西而不是笨重的框架。

【问题讨论】:

  • 我们在工作中使用Lightswitch 处理这类事情(有点)。
  • 我只读过关于 LightSwitch 并没有尝试过。据我所知,它独立于 Visual Studio,更适合应用程序的子集。
  • 我不确定您所说的“它独立于 Visual Studio”是什么意思。是的,它是一个单独的 Microsoft 产品,您必须获得许可。不,它不是一个单独的应用程序,它更像是一个 Visual Studio 插件。如果不知道您打算使用它创建哪种类型的应用程序,就很难知道 Lightswitch 是否适合。看到你在 Winforms 生成之后可能不是因为 Lightswitch 生成 Silverlight 应用程序。
  • 嗯...自从我的帖子发布以来已经过去了大约 15 个小时,我终于想出了我自己的自定义属性框架和一个接受任何类同时支持大多数 clr 类型的 Windows 窗体。它允许您传递 的实例并提供完整的编辑功能,包括验证、帮助和应用/取消功能。
  • @M.Babcock,是的,我坚持使用 winforms 应用程序。我尝试编写的上述场景将使我不必自定义开发大约 800 个实体表单!

标签: c# winforms generics reflection


【解决方案1】:

eXpressApp Framework (XAF) 可以动态生成 UI。在一个简单的情况下,程序员只会创建业务实体,根本不会关心 UI。

【讨论】:

  • eXpressApp 框架似乎包含了我所需要的一切。现在只需为年度订阅做预算:)。
【解决方案2】:

据我所知,没有在运行时生成 UI 代码的框架。以前有很多工具(代码生成器)可以做到这一点。但是您不会拥有“仅”更改代码的优势 - 您需要启动代码生成器的额外步骤。

如果你真的想在运行时创建 UI 信息——我会为你的属性生成属性,这会告诉你的 UI 生成器如何处理这个属性(如果没有给出属性——为你的数据类型设置一个默认值) .这是很多编码,但可以为您将来为中小型项目节省时间。

您可以做的另一件事是将您的 UI 信息外部化到一个 XML 文件中,并为该文件创建一个生成器。实际上有一个框架可以做到这一点——看看re-motion 框架。我不知道 UI 的部分是否免费,但它有一些功能(即 mixins)可以帮助您完成任务。

【讨论】:

  • Re-Motion 似乎有我需要的东西,但与 LPGL 相关联,我不能将其用于具有太大灵活性的商业产品。
  • 是的,使用属性是我目前即时生成 UI 的方式。
  • 好吧——那我也会去寻找属性。我自己研究了该领域,但没有任何东西可以即时生成 UI - 但是有很多不太好的代码生成器。
猜你喜欢
  • 1970-01-01
  • 2022-06-11
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
相关资源
最近更新 更多