如何实现选择文件的控件属性 实现一个自定义控件属性类似PictureBox的Image属性后面有一个带省略号的按钮点击后打开一个特定文件类型的对话框选择一个文件后将文件名返回 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用UiTypeEditor来自定义属性的编辑器以“文件”属性为例:总共分为三个部分:自定义的窗体、继承了UiTypeEditor的类、自定义控件的属性。1,自定义的窗体:随便如何定,只要最后可以返回一个string类型的值即可,比如有个public变量 filename。2,继承了UiTypeEditor的类:给当前项目新添一个类(直接写在自定义控件里估计也可),例子如下:using System;using System.Windows.Forms;using System.Drawing.Design;using System.Windows.Forms.Design;namespace WindowsApplication1.ucControl{/// <summary>/// IMSOpenFileInPropertyGrid 的摘要说明。/// </summary>public class clsUiType : UITypeEditor{public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context){return UITypeEditorEditStyle.Modal;}public override object EditValue(System.ComponentModel.ITypeDescriptorContext context,System.IServiceProvider provider,object value){IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));if (edSvc != null){// 可以打开任何特定的对话框//OpenFileDialog dialog = new OpenFileDialog();//dialog.AddExtension = false;//if (dialog.ShowDialog().Equals(DialogResult.OK))//{// return dialog.FileName;//}uiform1 ui1 = new uiform1();ui1.ShowDialog();if (ui1.finished){return ui1.filename;}}return value;}}}return UITypeEditorEditStyle.Modal;表示该属性是通过…按钮弹出窗体。3,自定义控件的属性:在属性的前面加上描述[EditorAttribute(typeof(clsUiType),typeof(System.Drawing.Design.UITypeEditor))]例如:[EditorAttribute(typeof(clsUiType),typeof(System.Drawing.Design.UITypeEditor))]public string 文件{get { return msfilename; }set { msfilename = value; }}3个步骤做完即可。 类似于如下定义属性即可[Browsable(true)][Category("Behavior")][DefaultValue(typeof(Image), "None")]public Image MyImage{ get { return m_imgTemp; } set { m_imgTemp = value; this.BackgroundImage = m_imgTemp; }}private Image m_imgTemp; to Uncommon(土匪) 谢谢to Knight94(愚翁) 你的是图像,不过也谢谢 有没有这样一种软件?扫描一种特定格式的文件后转换成c#类 好调用? TCPClient关于断点续传 ??的含义 快速导出数据到excel并设定背景色[每个单元个不一定相同] 初学c# 帮帮忙 怎样右键切换显项卡 怎么获得girdview 里删除这行的id !! 在C#中如何去一个字符串的前十位!!!!!! 求助不显示界面的应用程序?????? 如何Word和Excel直接在流中转化成Html 点击treeview控件节点前的+号扩展节点时,怎样让该节点增加一些新节点? 两个问题.无法形容
总共分为三个部分:自定义的窗体、继承了UiTypeEditor的类、自定义控件的属性。
1,自定义的窗体:随便如何定,只要最后可以返回一个string类型的值即可,比如有个public变量 filename。2,继承了UiTypeEditor的类:给当前项目新添一个类(直接写在自定义控件里估计也可),例子如下:
using System;
using System.Windows.Forms;
using System.Drawing.Design;
using System.Windows.Forms.Design;namespace WindowsApplication1.ucControl{/// <summary>/// IMSOpenFileInPropertyGrid 的摘要说明。/// </summary>public class clsUiType : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(
System.ComponentModel.ITypeDescriptorContext context,
System.IServiceProvider provider,
object value)
{
IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)
provider.GetService(typeof(IWindowsFormsEditorService));
if (edSvc != null)
{
// 可以打开任何特定的对话框
//OpenFileDialog dialog = new OpenFileDialog();
//dialog.AddExtension = false;
//if (dialog.ShowDialog().Equals(DialogResult.OK))
//{
// return dialog.FileName;
//}
uiform1 ui1 = new uiform1();
ui1.ShowDialog();
if (ui1.finished)
{
return ui1.filename;
}
}
return value;
}
}
}
return UITypeEditorEditStyle.Modal;表示该属性是通过…按钮弹出窗体。3,自定义控件的属性:在属性的前面加上描述
[EditorAttribute(typeof(clsUiType),typeof(System.Drawing.Design.UITypeEditor))]
例如:
[EditorAttribute(typeof(clsUiType),typeof(System.Drawing.Design.UITypeEditor))]public string 文件
{
get { return msfilename; }
set { msfilename = value; }
}
3个步骤做完即可。
[Browsable(true)]
[Category("Behavior")]
[DefaultValue(typeof(Image), "None")]
public Image MyImage
{
get { return m_imgTemp; }
set
{
m_imgTemp = value;
this.BackgroundImage = m_imgTemp;
}
}
private Image m_imgTemp;