C#自定义设计器——文件名选择编辑器
来源:互联网 发布:淘宝详情页图片像素 编辑:程序博客网 时间:2024/04/29 17:31
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;
然后再看效果:
到现在为止,基本上实现了想要的功能。
- C#自定义设计器——文件名选择编辑器
- Unity 编辑器扩展(依据选择的文件夹改变文件名)
- c#打开对话框选择后输出文件路径文件名
- FCK编辑器图标自定义-中云设计
- Unity3d——自定义编辑器Editor教程
- Spring自定义属性编辑器——1
- Spring自定义属性编辑器——2
- android自定义View_4——自定义属性的格式选择
- C# 创建自定义集合编辑器/自定义集合属性
- C#排序算法——选择法
- 选择排序——C#实现
- C#设计模式—解释器模式
- IOS设计模式的选择——>
- hadoop自定义输出文件名
- 自定义core文件名
- 自定义输出文件名
- hadoop自定义输出文件名
- 在线流程设计器activti modeler整合 activiti modeler在线流程设计器自定义代理人、候选人选择
- HTML标签“<>”无法以字符串存储和显示
- 第十六周OJ题目(4)——指针引出奇数因子
- 后台转换JSON数据类型,前台解析JSON数据
- 自旋锁
- Git常用命令
- C#自定义设计器——文件名选择编辑器
- vim指令总结
- OC中的Selector小解
- HDOJ 5141 LIS again 二分
- 博客学习日记-2014/12/11
- 【Linux】16条技巧让你更高效使用SSH
- AndroidStudio一直在feching
- EditText:This text field does not specify an inputType or a hint
- 块设备入门