.net - UITypeEditor 和 IExtenderProvider

标签 .net winforms design-time uitypeeditor iextenderprovider

我有一个扩展器(IExtenderProvider),它扩展了某些类型的 具有附加属性的控件。对于这些属性之一,我有 写了一个UITypeEditor。到目前为止,一切都很好。

扩展器本身也有几个属性,我正在尝试 用作 UITypeEditor 的一种默认值。我想做的是 能够在扩展器本身(而不是扩展控件)上设置属性, 当我打开 UITypeEditor 来获取附加属性之一时 扩展控件,我想将 UITypeEditor 中的值设置为该值 扩展器上的属性。

一个简单的示例:ExtenderProvider 有一个属性 DefaultExtendedValue。在表单上,​​我将此属性的值设置为“我的值”。扩展控件通过提供程序具有带有 UITypeEditor 的属性 ExtendedValue。当我打开属性 ExtendedValue 的编辑器时,默认(初始)值应设置为“My Value”。

在我看来,最好的地方是 UITypeEditor.EditValue,就在调用之前 IWindowsFormsEditorService.DropDownControl 或 .ShowDialog。

唯一的问题是我无法(或者我还没有发现如何)捕获 扩展程序提供程序本身在 EditValue 中的值,以读取相关属性的值并将其设置在 UITypeEditor 中。上下文给了我扩展 控制,但在这种情况下这对我来说没有用。

有什么办法可以实现我想要的吗?任何帮助表示赞赏!

谢谢 汤姆


@samjudson:这不是一个坏主意,但不幸的是它并没有让我完全明白。我真的希望能够为扩展程序提供程序的每个实例单独设置此默认值。 (我可能在一个表单上有多个,对于不同的扩展控件组具有不同的值。)

最佳答案

您可以自己读取该属性吗?

DefaultValueAttribute att = context.
    PropertyDescriptor.Attributes.
    OfType<DefaultValueAttribute>().
    FirstOrDefault();
object myDefault = null;
if ( att != null )
    myDefault = att.Value;

我使用 Linq 来简化代码,但您可以在 .Net 1 中执行类似的操作

关于.net - UITypeEditor 和 IExtenderProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26795/

相关文章:

c# - NLog 记录到配置中提到的特定目标

c# - 删除#region

c# - 使用 DrawString() 时出现 GDI+ 异常

forms - 了解 Delphi 窗体是否在运行时或设计时打开

vb.net - 如何使自定义控件的属性打开文件对话框?

.net - OpenCV多线程调用

java - 构造函数中的虚函数,为什么语言不同?

c# - 如何使用NuGet?

c# - 为什么 Winforms Click 事件比 MouseClick 事件慢?

c# - 如何在后代中禁用派生类中的设计器