C#.Net组件开发(高级篇) - 自定义CollectionEditor编辑器
C#.Net组件开发(高级篇) - 自定义CollectionEditor编辑器
自定义CollectionEditor编辑器
下图是DataGridViewColumnCollectionEditor, 用于编辑DataGridView的Columns。
DataGridView.Columns属性定义:
//
// 摘要:
// Gets a collection that contains all the columns in the control.
//
// 返回结果:
// The System.Windows.Forms.DataGridViewColumnCollection that contains all the
// columns in the System.Windows.Forms.DataGridView control.
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Editor("System.Windows.Forms.Design.DataGridViewColumnCollectionEditor, System.Design, Version=
[MergableProperty(false)]
public DataGridViewColumnCollection Columns { get; }
由此可见,Columns 属性是由DataGridViewColumnCollectionEditor 设计器进行设计的。
在VS内不能查看DataGridViewColumnCollectionEditor 的元数据一探究竟,非常遗憾!从网上找到资料,该编辑窗体是公用的,只需要继承CollectionEditor基类就能实现自己的设计器。
另外,DataGridViewColumnCollection 继承BaseCollection基类 ,并实现IList接口。
// 摘要:
// Represents a collection of System.Windows.Forms.DataGridViewColumn objects
// in a System.Windows.Forms.DataGridView control.
[ListBindable(false)]
public class DataGridViewColumnCollection : BaseCollection, IList, ICollection, IEnumerable
{
}
自定义CollectionEditor编辑器
/// <summary>
/// 自定义CollectionEditor编辑器
/// </summary>
public class MyCollectionEditor : CollectionEditor
{
public MyCollectionEditor(Type type)
: base(type)
{ }
/// <summary>
/// 限制一次选一个实例
/// </summary>
/// <returns></returns>
protected override bool CanSelectMultipleInstances()
{
return false;
}
/// <summary>
/// 指定创建的对象类型
/// </summary>
/// <returns></returns>
protected override Type CreateCollectionItemType()
{
return typeof(CSFrameworkNode);
}
protected override object CreateInstance(Type itemType)
{
//创建一个实例
CSFrameworkNode o = (CSFrameworkNode)itemType.Assembly.CreateInstance(itemType.FullName);
IDesignerHost host = (IDesignerHost)this.GetService(typeof(IDesignerHost));
host.Container.Add(o);//重要!自动生成组件的设计时代码!
//或者:
//this.Context.Container.Add(o);//重要!自动生成组件的设计时代码!
return o;
}
protected override void DestroyInstance(object instance)
{
base.DestroyInstance(instance);//重要!自动删除组件的设计时代码!
}
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
自定义MyNodeCollection对象集合
/// <summary>
/// 自定义BaseCollection对象集合,实现IList接口
/// 如Object Collection Editor窗体的Add/Delete钮不可用是因为没有实现IList接口
/// </summary>
public class MyNodeCollection : BaseCollection, IList
{
private ArrayList _innerList;
public MyNodeCollection()
{
_innerList = new ArrayList();
}
protected override ArrayList List
{
get
{
return (ArrayList)_innerList;
}
}
#region IList Members
public int Add(object value)
{
return this.List.Add(value);
}
public void Clear()
{
this.List.Clear();
}
public bool Contains(object value)
{
return this.List.Contains(value);
}
public int IndexOf(object value)
{
return this.List.IndexOf(value);
}
public void Insert(int index, object value)
{
this.List.Insert(index, value);
}
public bool IsFixedSize
{
get { return this.List.IsFixedSize; }
}
public void Remove(object value)
{
this.List.Remove(value);
}
public void RemoveAt(int index)
{
this.List.RemoveAt(index);
}
public object this[int index]
{
get
{
return List[index];
}
set
{
List[index] = value;
}
}
#endregion
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
定义一个MyNodeCollection类型的属性,并定义属性的编辑器
/// <summary>
/// 用于测试打开Collection Editor的编辑器窗体
/// </summary>
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Editor(typeof(MyCollectionEditor), typeof(UITypeEditor))]//属性编辑器
public MyNodeCollection MyNodeCollection
{
get
{
return _MyNodeCollection;
}
set
{
_MyNodeCollection = value;
}
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898

C#.Net组件开发(高级篇) - 开发复杂的设计时组件编辑器
C#.Net组件开发(高级篇) - 使用自定义TypeConverter生成设计时代码
标签:C#.Net组件开发 - 自定义属性编辑器持久化对象的属性
C#.Net组件开发 - 设计时使用自定义属性编辑器持久化对象
C#.Net组件开发(高级篇) - 全部源码下载
C#.Net组件开发(高级篇) - 设计时在窗体设计器文件内生成组件的代码
标签:C#.Net组件开发 - 自定义设计器持久化对象的属性
标签:C#.Net组件开发 - 自定义设计器(ComponentDesigner)
标签:C#.Net组件开发 - 属性窗体内显示自定义名称
C#.Net开发继承UITypeEditor接口的自定义属性编辑器
标签:C#.Net组件开发 - 设计时持久化对象数组
CSFrameworkV6 | 用户自定义打印机设置 (FastReport.NET 2023.1.8)|C/S开发框架
.NET Core 集成Swagger文档与自定义Swagger UI-C/S开发框架
C#.Net组件开发 - 使用Attach to Process实时调试设计器代码
C#.Net用户自定义控件制作教程
C#.Net自定义控件设置图标ToolboxBitmap的用法
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
