当前位置: 代码迷 >> .NET组件控件 >> 自定义控件 未找到 xx 类型上的构造函数,该怎么解决
  详细解决方案

自定义控件 未找到 xx 类型上的构造函数,该怎么解决

热度:8445   发布时间:2013-02-25 00:00:00.0
自定义控件 未找到 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()
{

}
  相关解决方案