PropertyGrid中加入了个下拉框,该如何进一步实现自动完成功能 如题目前使用的是这种方式:public abstract class ComboBoxItemTypeConvert : TypeConverter 想直接使用combobox,但是找不到获取 当前属性网格位置的方法。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 通过重载TypeConverter的GetStandardValues()是可以为属性提供一个选择列表,不过局限比较多。自定义编辑框则比较灵活,可以自由使用其他控件以及自定义控件。要做的就是为属性指定一个编辑器:class MyClass{ [Editor(typeof(MyComboEditor), typeof(UITypeEditor))] public XXXXX Something { get; set; }}如何写MyComboEditor,请参考微软的例子UITypeEditor。你可以改变上述例子的AngleControl控件,加入ComboBox,并进一步实现自动完成功能。 那你为什么想要直接用ComboBox呢?另外用上面(一楼)的办法远比你直接用ComboBox更灵活呀? 你先从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 ! 直接用combox的话 做数据绑定方便,写的代码少。像datagridView里实现COMBOX一样不知道 效果上面差多少最近现学现用.NET。昨天晚上回去后,忽然在思路上想到了你们所提的方法,不过具体实现不清楚呵呵,谢谢各位,开始给分了~ GridView后台代码获取数据库中的值进行超链接 bat文件和exe文件有啥区别 c#问题 本群(8088413)走精兵綫路!不再招新手。希望提高技術的1年以上.NET技術的朋友加入 用C#将数据导入Excel,怎样操作它的对象合并Excel的单元格?谢谢! 关于字体设置的问题,哪位高手帮忙解决一下? C#监听端口的windows服务,有点疑问请大家来看看,有代码框架,马上给分!~~ C# 如何打印独立的水晶报表 文档 谁能给我一个控件? 网络与线程 datatable的排序问题 安装部署软件中许可协议安装不了
class MyClass
{
[Editor(typeof(MyComboEditor), typeof(UITypeEditor))]
public XXXXX Something { get; set; }
}如何写MyComboEditor,请参考微软的例子UITypeEditor。你可以改变上述例子的AngleControl控件,加入ComboBox,并进一步实现自动完成功能。
{
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 !