c# - VS Designer中的自定义控件: Avoid serialization of Collection properties

标签 c# vb.net visual-studio-2012 serialization windows-forms-designer

我制作了一个新的 WinForms 控件

Public Class jwGraph
    Inherits Control

此控件中有 BindingLists(Of Foo)。为了避免有关序列化(错误消息)的其他 Visual Studio 错误,我将 Serializable 属性添加到 Foo 并将一些其他标记添加到 BindingList(Of Foo) )

示例:

Foo 声明

<Serializable> _
Public Class FreeMarker

Bindinglist(Of Foo) 声明:

<System.ComponentModel.Browsable(False)>
<EditorBrowsable(EditorBrowsableState.Never)>
<System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)>
    Public WithEvents FreeMarkers As BindingList(Of FreeMarker)

当我使用控件时,Visual Studio 会将 base64 数据资源添加到表单的 resx 文件和类似的行

Me.JwGraph1.FreeMarkers = CType(resources.GetObject("JwGraph1.FreeMarkers"), System.ComponentModel.BindingList(Of jwToolLib.jwGraph.FreeMarker))

给设计师。问题是,在此之后我无法以任何方式更改控件代码中的任何内容(或更改程序集),因为这样反序列化将失败,我必须竭尽全力让它再次运行全部。

许多控件使用集合。我似乎找不到他们的实现(我尝试查看反射器中的基本控件)和我的实现之间的区别,但他们的集合不会以任何这样的方式显示在设计器中。

那么如何防止在设计时将集合生成为二进制资源呢? 它们在控件的构造函数中初始化。

我的代码是在 VB.net 中,但也非常欢迎用 C# 提供答案。

最佳答案

像往常一样,连续3个小时白发,然后决定询问,迅速找到解决方案:

如此处所述http://msdn.microsoft.com/en-us/library/53b8022e%28v=VS.100%29.aspx您可以在代码中添加 ShouldSerialize[...] 函数以防止特定字段被序列化。我猜设计师会评估这些功能,然后决定做什么。

为了与上面的示例保持一致:

除了

<System.ComponentModel.Browsable(False)>
<EditorBrowsable(EditorBrowsableState.Never)>
<System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)>
Public WithEvents FreeMarkers As BindingList(Of FreeMarker)

向您的类添加两个函数:

Public Function ShouldSerializeFreeMarkers() As Boolean
    Return False
End Function
Public Sub ResetFreeMarkers()
    Series = Nothing
End Sub

你瞧:不再需要设计时序列化。

关于c# - VS Designer中的自定义控件: Avoid serialization of Collection properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23985139/

相关文章:

c# - "@PasswordHash"附近的语法不正确

.net - 在 ListView 中显示文件夹图标

asp.net <form> 标记从 asp 中剥离 :literal

c# - Entity Framework 代码生成策略 - Nullable varchar 与 Non-Nullable varchar

c# - 使用 Linq-To-Entities 时可以创建嵌套类吗?

c# - Visual Studio 2012 条件捆绑

c# - Marshall结构通过sendmessage将其传递给delphi记录

javascript - 将 javascript 对象转换到 Controller 的模型中

c# - 是否可以通过 COM 互操作转发委托(delegate)?

计算温度项目,产生误差