怎么使得继承自CollectionBase的Items在设计时的内容持久?
类似ListView中的Items一样,他设计后会在代码中生成ListViewItem,我怎么修改我的代码才能使得我的Items也会自动在代码中生成Item的相关代码?
还有一个问题就是:
我在CollectionBase中重写了OnInsertComplete后,在属性中点击“增加”时会执行我的OnInsertComplete代码.
但我重写了CollectionBase的OnRemoveComplete时,点击“移除”时却不执行我的OnRemoveComplete中的代码,为何?

解决方案 »

  1.   

    如下:
    public class A :CollectionBase
    {
        ...
    }public class B : Component   // 是个控件。
    {
        private A _a;    // 加上下面一句话
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public A A
        {
            set{_a = value;}
            get{return _a;}
        }
    }不知道楼主是不是一个控件的属性为Collection类型,但是通过“Design Time”填入的值,不能被保存的问题。
      

  2.   

    (WINFORM)
    public class A :CollectionBase
    {
        ...
    }public class B : System.Windows.Forms.Control// 我是继承自控件的
    {
        private A _a = null;
    public B()           //我加了这个,是要实例化的
    {
    _a = new A();
    }
        // 加上下面一句话这个我加过了。
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public A A
        {
            set{_a = value;}
            get{return _a;}
        }
    }
      

  3.   

    如果为Component上面这样写就对了。
    但是为Control的话,好像你的class B在构造的时候,还要对其继承的基类进行构造吧。我也没有写过Control,你自己试试,有问题在贴出来,大家一起解决。
      

  4.   

    第二个问题我已经解决了,原来重载OnClearComplete就行了。但第一个问题还在
      

  5.   

    //以下代码是我写这个控件的基本结构,请帮我看看有什么问题
    public class ControlItem
    {
    private string strText;
    public string Text
    {
    get
    {
    return strText;
    }
    set
    {
    strText = value;
    }
    }
    }
    public class ControlItemCollection : System.Collections.CollectionBase
    {
    private MyControl _Owner;
    public ControlItemCollection(MyControl Owner)
    {
    _Owner = Owner;
    }
    public ControlItem this[int index]
    {
    get
    {
    return (ControlItem)List[index];
    }
    set
    {
    List[index] = value;
    }
    }
    public int Add(ControlItem value)
    {
    return List.Add(value);
    }
    //...IndexOf/Insert/Remove/Contains/等方法
    }
    public class MyControl : System.Windows.Forms.Control
    {
    private ControlItemCollection _Items = null;
    public MyControl()
    {
    if(_Items == null)
    _Items = new ControlItemCollection(this);//在Collection中我要用到他
    }
    //我看ListView也没有Set吧,所以我没有写了
    //现在出现的问题是,我在设计界时,有数据的,但数据无法保存到窗口的代码中
    //就像ListView,但我在设置时的ListViewItem不一保存在代码中一样。
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public ControlItemCollection Items
    {
    get
    {
    return _Items;
    }
    }
    }
      

  6.   

    自己解决了!高兴
    [email protected]