2

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

谢谢, 马蒂

4

3 回答 3

0

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

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

于 2009-09-14T07:14:33.337 回答
0

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

文章中的大部分相关信息也在Stack Overflow 上的另一个答案中被引用。

于 2014-02-13T16:53:22.333 回答
0

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

我遇到了同样的问题:属性要么丢失,要么根本没有出现。就我而言,问题是,使用 ProvideProperty、CanExtend 以及 SetXXX 和 GetXX 方法指定的类型不一样。例如,ProvideProperty 和 CanExtend 将“Control”指定为类型,但 SetXXX 和 GetXXX 方法将“object”指定为第一个参数。

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

也许这有帮助。

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

于 2018-02-15T08:16:15.487 回答