读书人

自定义控件 未找到 xx 类型上的构造函

发布时间: 2012-01-19 20:57:59 作者: rapoo

自定义控件 未找到 xx 类型上的构造函数
想实现的功能:

能为一个自定义控件的一个属性(类型为自定义类型集合List<MyStrcut>)提供设计时的编辑.

下面是我的代码,设计时能弹出集合编辑对话框,但是点击添加按钮时候,就抱未找到XX类型上的构造函数.

哪位高手指点下啊.

public class ListBoxExItem
{
public string text;

public int color;

public ListBoxExItem(string text, int color)
{
this.text = text;
this.color = color;
}
}


public class ListBoxExItemConverter : ExpandableObjectConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == typeof(string))
{
return true;
}
return base.CanConvertFrom(context, sourceType);
}

public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
if (destinationType == typeof(InstanceDescriptor))
{
return true;
}
return base.CanConvertTo(context, destinationType);
}

public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
string obj = (string)value;

string[] parameters = obj.Split(',');

ListBoxExItem item = new ListBoxExItem(
parameters[0],
int.Parse(parameters[1]));
return item;


return base.ConvertFrom(context, culture, value);
}

public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{

if (destinationType == typeof(InstanceDescriptor))
{
ListBoxExItem dp = (ListBoxExItem)value;
ConstructorInfo ctor =
typeof(ConstructorInfo).GetConstructor(new Type[] { typeof(string), typeof(int) });

return new InstanceDescriptor(ctor, new object[] {dp.text,dp.color});
}


return base.ConvertTo(context, culture, value, destinationType);
}


}

class Class1 : ListBox
{
List<ListBoxExItem> list;
[DesignerSerializationVisibility( DesignerSerializationVisibility.Content)]
public List<ListBoxExItem> List
{
get { return list; }
set { list = value; }
}
}




[解决办法]
点击添加时, 会调用

ListBoxExItem()

而你的没有, 定义一个默认构造函数, 初始化成员变量为默认值.

就可以了.
[解决办法]
添加一个默认构造函数
public ListBoxExItem()
{

}

读书人网 >.NET

热点推荐