为啥 IS Extender Provider Properties 在 C# 窗口应用程序的 Designer 中丢失?

Posted

技术标签:

【中文标题】为啥 IS Extender Provider Properties 在 C# 窗口应用程序的 Designer 中丢失?【英文标题】:why IExtenderProvider Properties are lost in Designer in C# window appliaction?为什么 IS Extender Provider Properties 在 C# 窗口应用程序的 Designer 中丢失? 【发布时间】:2009-06-12 12:20:44 【问题描述】:

我已经为控件创建了一个 IExtenderProvider (Extender)。使用 Extender,我正在迭代控件集合并对其进行验证。它工作正常。但是,有时在更改某些设计时,或者当设计师刷新时(同时删除一些事件从代码),扩展器提供的属性(验证顺序和组,在我的例子中)从设计器中丢失,控件本身没有添加到扩展器集合中。所以,验证由应用程序完成崩溃(当然还有应用程序本身)。我在 IExtenderProvider 中也有 ShouldSerialize 和 Reset 方法。但没有任何帮助。请指导我如何让所有控件始终对扩展程序可见。

谢谢, 马蒂

【问题讨论】:

【参考方案1】:

这有时会在 Extender 中出现异常时发生。如果发生这种情况,您将需要在设计时调试您的扩展器。我今天不得不这样做几次。查看Debugging Design-Time Controls,它应该可以帮助您开始

有时会发生这种情况,因为您更改了 Extender 的属性和方法,并且“序列化”值不再合适。

【讨论】:

【参考方案2】:

Tim Van Wassenhove 的这篇题为“Bending the code generation of IExtenderProvider to your will”的文章可能有与您的问题相关的解决方案。它描述了为您的 IExtenderProvider 实现构建自定义序列化程序,这样做可以缓解此处所述的问题。

文章中的大部分相关信息也被another answer here on Stack Overflow引用。

【讨论】:

【参考方案3】:

以下答案对于 OP 来说绝对是迟到的,但可能对其他人有所帮助。

我遇到了同样的问题:属性要么丢失,要么根本不显示。就我而言,问题在于,使用 ProvideProperty、CanExtend 以及 SetXXX 和 GetXX 方法指定的类型不一样。例如,ProvideProperty 和 CanExtend 指定 'Control' 作为类型,但 SetXXX 和 GetXXX 方法指定 'object' 作为第一个参数。

所以,一旦我确定,对于在 ProvideProperty 中指定的每一个类型,我都有匹配的 GetXXX 和 SetXXX,一切都按预期工作。

也许这会有所帮助。

注意:修复代码后,我必须重新启动 Visual Studio。

【讨论】:

以上是关于为啥 IS Extender Provider Properties 在 C# 窗口应用程序的 Designer 中丢失?的主要内容,如果未能解决你的问题,请参考以下文章

THMBurp Suite:Extender(Burp Suite-扩展器)-学习

Jetty 更新到 9.4.x 后:缺少约束:Require-Capability: osgi.extender;过滤器:=“(osgi.extender=osgi.serviceloader.pro

CreateDatabase is not supported by the provider

为啥第二个(兄弟)React Context Provider 不起作用?或者,如果上面有同级 Context Provider,为啥 React Context Provider 不起作用

BurpSuite系列----Extender模块(扩展器)

BurpSuite系列----Extender模块(扩展器)