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编辑器 C# Code: /// <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对象集合 C# Code: /// <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类型的属性,并定义属性的编辑器 C# Code: /// <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 VS设计器体验: 扫一扫加作者微信
参考文档:
C#.Net自定义控件 - CheckedListBoxEditor(支持多值勾选及新增) C#.Net自定义控件 - GridPopupContainerLookup C#开发自定义控件-设置显示工具箱中的图标 C#.Net开发继承UITypeEditor接口的自定义属性编辑器 C#.Net组件开发 - 设计时使用自定义属性编辑器持久化对象 标签:C#.Net组件开发 - 设计时持久化对象数组 标签:C#.Net组件开发 - 属性窗体内显示自定义名称 标签:C#.Net组件开发 - 自定义设计器(ComponentDesigner) 标签:C#.Net组件开发 - 自定义设计器持久化对象的属性 标签:C#.Net组件开发 - 自定义属性编辑器持久化对象的属性 C#.Net组件开发(高级篇) - 设计时在窗体设计器文件内生成组件的代码 C#.Net组件开发(高级篇) - 开发复杂的设计时组件编辑器 C#.Net组件开发(高级篇) - 全部源码下载 C#.Net组件开发 - 使用Attach to Process实时调试设计器代码 C#.Net组件开发(高级篇) - 使用自定义TypeConverter生成设计时代码
其它资料:
什么是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内容管理系统 | |