首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-12-30 
自定义控件 未找到 xx 类型上的构造函数想实现的功能:能为一个自定义控件的一个属性(类型为自定义类型集合

自定义控件 未找到 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()
{

}

热点排行