C# 如何确定UserControl集合属性在设计时已更改?
我有一个UserControl,它有一个collection属性。我的部分要求是控件的GUI根据集合的内容在设计模式下修改自身。例如,想想ListBox 我的代码如下所示(Add的重写只是一个实验):C# 如何确定UserControl集合属性在设计时已更改?,c#,winforms,user-controls,.net-2.0,C#,Winforms,User Controls,.net 2.0,我有一个UserControl,它有一个collection属性。我的部分要求是控件的GUI根据集合的内容在设计模式下修改自身。例如,想想ListBox 我的代码如下所示(Add的重写只是一个实验): 公共部分类MyControl:UserControl { 公共类集合:列表 { 公共新空添加(字符串项) { Console.Beep(); 基础。添加(项目); } } [类别(“数据”)] [说明(“控件中要显示的项目”)] [编辑器(“System.Windows.Forms.
公共部分类MyControl:UserControl
{
公共类集合:列表
{
公共新空添加(字符串项)
{
Console.Beep();
基础。添加(项目);
}
}
[类别(“数据”)]
[说明(“控件中要显示的项目”)]
[编辑器(“System.Windows.Forms.Design.StringCollectionEditor,System.Design”,类型(System.Drawing.Design.UITypeEditor))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
公众收集物品
{
得到
{
返回斜纹螨;
}
}
一切正常,除了在设计时发现集合已通过StringCollectionEditor修改外。我在控件创建时收到“嘟嘟”声,如果我从代码添加到集合中
我知道这是可以做到的,因为ListBox可以做到。有人知道怎么做吗?提前谢谢。这就是新关键字的问题,它无法神奇地使方法虚拟。StringCollectionEditor将调用IList.Add()来添加项。这将调用List.Add(),而不是您的版本。您必须放弃列表,并实现从IList继承的自己的集合类。这大部分是枯燥的工作,您使用列表来实现它。如下所示:
class StringCollection : System.Collections.IList {
private List<object> impl = new List<object>();
public int Add(object value) {
Console.Beep();
impl.Add(value);
return Count;
}
public void Clear() {
impl.Clear();
}
// etc...
}
class-StringCollection:System.Collections.IList{
私有列表impl=新列表();
公共整数加法(对象值){
Console.Beep();
内含增值;
返回计数;
}
公共空间清除(){
impl.Clear();
}
//等等。。。
}
请注意ListBox也是如何做到这一点的,它使用ObjectCollection。也许您也可以使用它。请记住,Winforms是在泛型可用之前创建的。谢谢-从脸上擦去大量鸡蛋:-)
class StringCollection : System.Collections.IList {
private List<object> impl = new List<object>();
public int Add(object value) {
Console.Beep();
impl.Add(value);
return Count;
}
public void Clear() {
impl.Clear();
}
// etc...
}