none
如何禁止设计器为自定义控件自动生成无用代码? RRS feed

  • 问题

  • 我想做一个继承 combox的自定义控件,然后每次 实例化的时候根据系统日期生成下拉列表。
    我在构造函数加入
    Sub New()
            InitializeComponent()
            Me.Items.Add(DateTime.Today.ToString)
    End Sub
    编译后加入工具箱,但我设计窗体使用它运行后, 下拉列表出现两个一样的项目,

    然后我发现设计器自动在我的控件的 designer.vb文件中加入一句    Me.Tc1.Items.AddRange(New Object() {"2009-8-15 0:00:00"}),如果把这个语句删除,程序就可以正确的运行。
    请问各位高手怎么能禁止设计器自动加这语句?
    我想用DesignerSerializationVisibility属性,但这个属性只能用在 property,不能用在 sub new,请各位高手指教。谢谢。
    2009年8月15日 9:00

全部回复

  • Me.Items.Add(DateTime.Today.ToString)从new移出去就不会有了


    I am Rayman Zhai
    2009年8月17日 2:00
  • Me.Items.Add(DateTime.Today.ToString)从new移出去就不会有了


    I am Rayman Zhai

    那我就不用做这个自定义控件了。
    2009年8月17日 2:56
  • 自己查了几天资料,发现这个问题可以归结为:
    如何反序列化基类的属性。我自己试了一天,发现这样可行:
     Public Class MyComboBox
     Inherits Combobox
        Sub New()
            InitializeComponent()
                MyBase.Items.Add(DateTime.Now.ToString)
            Next
        End Sub

        <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> Public Shadows ReadOnly Property Items() As ComboBox.ObjectCollection
            Get
                Return MyBase.Items
            End Get
        End Property
    End Class
    就是把基类的 Items 属性重写,然后加上DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)修饰,程序就可以按预计运行。但是 ComboBox.Items不是 Overridable的,必须要 Shadows,感觉会留下不可预知的错误,请问各位高手有没有更好更安全的方法。

    看了几天的 Serializable NonSerialized ShouldSerializeXXX 和 DesignerSerializationVisibility资料很散乱,越看越糊涂,请问谁知道有关于这方面系统的介绍及资料的,请给个链接啊。

    2009年8月17日 4:00
  • 看看MSDN吧。
    http://msdn.microsoft.com/zh-cn/library/system.componentmodel.designerserializationvisibility%28VS.80%29.aspx
    http://msdn.microsoft.com/zh-cn/library/system.componentmodel.designerserializationvisibilityattribute%28VS.80%29.aspx
    http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.iserializable.aspx
    http://hi.baidu.com/2009ajun
    2009年8月17日 6:39
  • 看看MSDN吧。
    http://msdn.microsoft.com/zh-cn/library/system.componentmodel.designerserializationvisibility%28VS.80%29.aspx
    http://msdn.microsoft.com/zh-cn/library/system.componentmodel.designerserializationvisibilityattribute%28VS.80%29.aspx
    http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.iserializable.aspx
    http://hi.baidu.com/2009ajun

    MSDN越看越晕。有简单明确的方法解决我这个问题的吗?
    2009年8月17日 10:41