C#自定义设计器——文件名选择编辑器



C#自定义设计器——文件名选择编辑器

暑期的时候用MCI封装了一个播放音乐的类,最近学习了GDI+,想着将这个类做成一个自定义的控件,那么在做的过程中有一个属性,如下:

		public string FileName
		{
			get { return fileName; }
			set { fileName = value; }
		}
		private string fileName;

编译之后,将它加到窗体上后,调到该控件的属性编辑框,可以看到,在杂项中有这个属性,我们可以再后面的框框中输入文件名,可是这个有点不人性化。我想能不能做成我一点某处就弹出一个文件选择框,通过谷歌上搜索了一下,查到了一个设计时特性——System.ComponentModel.Editor,实际上它就是定义好的一个类,其中一个构造函数如下:

		//
		// 摘要:
		//     用类型和基类型初始化 System.ComponentModel.EditorAttribute 类的新实例。
		//
		// 参数:
		//   type:
		//     一个表示编辑器类型的 System.Type。
		//
		//   baseType:
		//     用作编辑器查找键的基类或接口的 System.Type。此类必须是 System.Drawing.Design.UITypeEditor 或是从它派生的。
		public EditorAttribute(Type type, Type baseType);

第一个参数是想要的编辑器的类型,第二个一该编辑器的基类类型,基类一般为UITypeEditor。

于是,我首先添加引用

双击该引用,打开对象浏览器,在里面发现了一个已经定义好的类,原来别人早就提供了(想想也是,连我这个渣渣都有如此需求),这下就可以不用自己去实现了,直接拿来用吧!

		[System.ComponentModel.Editor(typeof(FileNameEditor), typeof(UITypeEditor))]
		public string FileName
		{
			get { return fileName; }
			set { fileName = value; }
		}
		private string fileName;

这段代码只是在上面的基础上加了一个Editor特性,再来看效果:多了一个按钮,当点击按钮会弹出:

这不就是我想要的吗,总算弹出来了。

可是人心总是不满的,我立马又有了新的欲望——文件过滤。因为这个选择框选择所有文件,所以我想能否过滤一下。如果是使用OpenFileDialog,那就so easy,只需要设置Filter属性就可以了,但是关键现在不是啊。正当我一筹莫展百感交集的时候我发现这个弹出的框和OpenFileDialog长得不仅形似,而且神似,于是我猜想他们两者必然存在关系。然后我就去查FileNameEditor类的相关方法,希望能找到一些蛛丝马迹,皇天不负有心人,总算让我看到了曙光

protected virtual void InitializeDialog(System.Windows.Forms.OpenFileDialog openFileDialog)

哈哈,原来它有一个函数的参数就是OpenFileDialog,而且这个函数还是虚函数,我只需要继承FileNameEditor类,然后重写这个方法,那要的效果还不任我发挥啊!

新增一个类AudioFileNameEditor,继承FileNameEditor:

	public class AudioFileNameEditor : FileNameEditor
	{
		protected override void InitializeDialog(System.Windows.Forms.OpenFileDialog openFileDialog)
		{
			base.InitializeDialog(openFileDialog);

			openFileDialog.Filter = "Audio文件|*.mp3";
		}
	}

修改属性代码:

		[System.ComponentModel.Editor(typeof(AudioFileNameEditor), typeof(UITypeEditor))]
		public string FileName
		{
			get { return fileName; }
			set { fileName = value; }
		}
		private string fileName;

然后再看效果:

到现在为止,基本上实现了想要的功能。

时间: 2024-08-11 19:07:31

C#自定义设计器——文件名选择编辑器的相关文章

XForms设计器-----XPath编辑器

GForms平台提供XPath编辑器,辅助开发人员开发xpath表达式. 分为三个区域:选择区域.编辑器区域及问题显示区域. 其中,选择区域: 模型实例树:包含所有的模型实例数据节点,包括属性及元素,如果需要选择某个节点请双击或拖拽到编辑器区域即可. 函数树:包含所有的xforms1.0及xforms1.1所支持的所有xpath,每个函数具体使用说明请参考相关xpath手册. 操作符树:xpath所支持的操作. 配置提示: 如果需要选择模型实例自身,则请在模型实例树上选择模型实例树节点或模型实例

常规功能和模块自定义系统 (cfcmms)—041模块附加字段和新的Grid方案设计器

041模块附加字段和新的Grid方案设计器 在整个自定义系统,模块附加字段也是有必要的.对于一个模块来说附加的字段有二种,一种是父模块中的字段,另一种是子模块中的聚合字段.在模块记录生成sql语句的时候,只是生成了该模块的所有基本字段和其直接父模块的id和name的字段.不可能将所有父模块的字段都加进去,只能指定一些必需的字段加入到sql语句中.比如在获取订单数据的时候,最基本的sql语句中只包括了目的的市和始发地市的信息,如果要在grid中显示始发地省和目的地省就需要设置一下附加字段,这是一种

润乾报表设计器中使用 spring 框架实现自定义数据集

spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.在 web 开发环境中经常会与 struts.hibernate联合起来使用,进行规范的框架结构开发.润乾中的二次开发也可以与 SSH 框架相结合部署到 web 项目中.本文介绍在设计时没有启动 web 服务,在设计器中使用 spring 的方式来实现自定义数据集. 实现思路:编写两个自定义数据集,一个在设计器中使用,一个在 web 项目中使用,在设计器中使用的类需要编写临时加载 spring 框架配置文件的代码,启动 spr

工作流引擎之流程设计器和自定义表单设计器

发一个预览版的工作流设计器和表单设计器,后续问题继续探讨工作流引擎原理和设计器 原理,其中部分设计素材来源于网络. 演示地址: http://211.149.216.199/frame/frame.action 账号:flow密码:flow 交流QQ群:163383141 1.工作流设计器 2.自定义表单设计器

【StiReport】在设计器中增加自定义函数

1.创建一个自定义函数 namespace Winform { public class methos { public static string 小数转换成中文(decimal 小数) { return "321"; } } } 2.将函数注册到StiReport中 StiFunctions.AddFunction("自定义函数", "小数转换成中文", "小数转换成中文", "小数转换成中文", ty

ActiveReports 9 新功能:可视化查询设计器(VQD)介绍

原文:ActiveReports 9 新功能:可视化查询设计器(VQD)介绍 在最新发布的ActiveReports 9报表控件中添加了多项新功能,以帮助你在更短的时间里创建外观绚丽.功能强大的报表系统,本文将重点介绍可视化数据查询设计器,无需手动编写任何SQL语句,主要内容如下: (一)访问可视化查询设计器 (二)可视化查询设计器包含的元素 可视化查询设计器提供的图形界面使用交互的创建查询和预览结果的方法帮助用户更简单的绑定数据.使用可视化查询设计交互界面,帮助不熟悉SQL的用户更容易的设计,

基于jquery的web在线流程图设计器gooFlow

1.Gooflow特点 1.1 跨浏览器 可兼容IE7--IE10, FireFox, Chrome, Opera等几大内核的浏览器,且不需要浏览器再加装任何控件. 1.2 多系统兼容性.可移植性 由于只包括前台UI,因此二次开发者可很方便将本插件用在任何一种需要流程图的B/S系统应用上,流程图的详细实现逻辑完全交于后台程序开发者自己实现;对于后台,只要能返回/接收能被本插件解析的JSON格式数据即可.所以本插件可用于不同的服务器语言建立的后台上. 1.3 跨领域 流程图设计器不止用在电信领域,

MyEclipse SWT/Swing设计器(下)

在MyEclipse SWT/Swing设计器(上)一文中,小编为大家介绍了什么是SWT/ Swing设计器.创建一个UI元素以及如何设计视图.接下来小编继续为大家介绍另外几节内容,希望能够帮助到大家. 4. 源视图 源视图是您手工编写代码以及查看生成代码的工具.源视图是标准的Java编辑器,同时它还提供以下功能: 语法高亮 内容/代码辅助 代码格式化 导入辅助 快速修复 集成的调试功能 源视图 编辑器布局参数控件相对于该设计视图中源视图的位置.在默认情况下,它们有独立的标签.标注源码和设计(您

MyEclipse SWT/Swing设计器(上)

1. 什么是SWT/ Swing设计器? SWT/ Swing设计器是一个Java GUI设计器,这使得它非常容易创建Java GUI应用程序而无需花费大量时间来编写显示简单形式的代码.您可以使用WYSIWYG可视化设计器在几分钟之内创建复杂的视窗,同时生成Java代码.您也可以使用拖放操作来轻松地添加控件.添加事件处理程序到控件中.改变使用控件编辑器的各种属性.国际化您的应用程序等等.生成的代码并不需要额外的自定义库来编译和运行,并且SWT能反向工程处理大部分手写的Java GUI代码. 该编