【发布时间】:2012-02-08 07:27:20
【问题描述】:
我正在考虑可能解决我正在处理的问题(.NET 3.5 WinForms 应用程序)。
在我们的应用程序中,我们有许多方法 (C#),其参数由应用程序的用户输入。
一个例子是这样的:
public void DoSomething(string name, DateTime date)
{
// ...
}
当前使用简单文本框输入名称、日期。 我们希望拥有丰富的编辑器、受密码保护的输入框、自动完成等功能。
我希望使用 PropertyGrid 进行用户输入,但是此控件只能绑定到对象,而不能绑定到参数。
我已阅读 MSDN 杂志上关于 ProperyGrid 的两篇优秀文章:
但是,这似乎在预先知道将绑定到 PropertyGrid 的对象的情况下很有帮助,这不是我的情况。
可以支持这种情况吗?有没有简单易行的解决方案?
我想过使用 Reflection.Emit 在运行时创建一个“临时”对象,其属性将是方法的参数。 我以前从未这样做过(使用 Reflection.Emit 命名空间),我想知道使用它的性能损失? (它实际上是在运行时在内存中编译代码还是它是如何工作的?)
【问题讨论】:
-
是什么阻止了您将 Expando 对象用于此类用途?
-
编辑了我的问题 - 使用 3.5,我们没有 Expando。
-
那么使用字典并使用反射 API 调用您的方法呢?我在我们的 CMS 中使用相同的东西来集中对特定类方法的任意 Web 方法调用。
-
调用方法不是问题。让用户通过 PropertyGrid(或任何其他易于使用的 UI 控件)输入方法的参数是个问题。
-
你不能遍历 PropertyGrid 项目并收集用户提供的数据吗?
标签: c# .net winforms propertygrid reflection.emit