实现一个自定义控件属性类似PictureBox的Image属性
后面有一个带省略号的按钮
点击后打开一个特定文件类型的对话框
选择一个文件后将文件名返回

解决方案 »

  1.   

    使用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个步骤做完即可。
      

  2.   

    类似于如下定义属性即可
    [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;
      

  3.   

    to Uncommon(土匪)  谢谢to Knight94(愚翁) 你的是图像,不过也谢谢