怎么使得继承自CollectionBase的Items在设计时的内容持久?
类似ListView中的Items一样,他设计后会在代码中生成ListViewItem,我怎么修改我的代码才能使得我的Items也会自动在代码中生成Item的相关代码?
还有一个问题就是:
我在CollectionBase中重写了OnInsertComplete后,在属性中点击“增加”时会执行我的OnInsertComplete代码.
但我重写了CollectionBase的OnRemoveComplete时,点击“移除”时却不执行我的OnRemoveComplete中的代码,为何?
类似ListView中的Items一样,他设计后会在代码中生成ListViewItem,我怎么修改我的代码才能使得我的Items也会自动在代码中生成Item的相关代码?
还有一个问题就是:
我在CollectionBase中重写了OnInsertComplete后,在属性中点击“增加”时会执行我的OnInsertComplete代码.
但我重写了CollectionBase的OnRemoveComplete时,点击“移除”时却不执行我的OnRemoveComplete中的代码,为何?
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”填入的值,不能被保存的问题。
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;}
}
}
但是为Control的话,好像你的class B在构造的时候,还要对其继承的基类进行构造吧。我也没有写过Control,你自己试试,有问题在贴出来,大家一起解决。
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;
}
}
}
[email protected]