如题
目前使用的是这种方式:public abstract class ComboBoxItemTypeConvert : TypeConverter 想直接使用combobox,但是找不到获取 当前属性网格位置的方法。

解决方案 »

  1.   

    通过重载TypeConverter的GetStandardValues()是可以为属性提供一个选择列表,不过局限比较多。自定义编辑框则比较灵活,可以自由使用其他控件以及自定义控件。要做的就是为属性指定一个编辑器:
    class MyClass
    {
            [Editor(typeof(MyComboEditor), typeof(UITypeEditor))]
            public XXXXX Something { get; set; }
    }如何写MyComboEditor,请参考微软的例子UITypeEditor。你可以改变上述例子的AngleControl控件,加入ComboBox,并进一步实现自动完成功能。
      

  2.   

    那你为什么想要直接用ComboBox呢?另外用上面(一楼)的办法远比你直接用ComboBox更灵活呀?
      

  3.   

    你先从UITypeEditor派生一个类:XXXEditor,最简单的情况是class XXXEditor:UITypeEditor
    {
        IWindowsFormsEditorService es;
        public override UITypeEditorEditStyle GetEditStyle (ITypeDescriptorContext context)
        {
             return UITypeEditorEditStyle.DropDown;
        }
        public override object EditValue(ITypeDescriptorContext context,    IServiceProvider provider, object value)
        {
            if (provider == null)return;
            if((es =provider.GetService(typeof(IWindowsFormsEditorService))as IWindowsFormsEditorService)==null)return;
            MyEditControl ec = new MyEditControl();
            es.DropDownControl(ec);
            value = selectionControl.LightShape;
        }    return value;
    }}其中的斜体部分的类型是你自己定义的控件,一般从UserControl派生就生,并且你要根据实际定义构造函数,以便将要编辑的值传递给MyEditControl,如果是复杂类型的话还应重写两个方法:GetPaintValueSupported 和PaintValue !
      

  4.   

    直接用combox的话 做数据绑定方便,写的代码少。像datagridView里实现COMBOX一样不知道 效果上面差多少最近现学现用.NET。昨天晚上回去后,忽然在思路上想到了你们所提的方法,不过具体实现不清楚呵呵,谢谢各位,开始给分了~