首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自定义FileNameEditor

自定义FileNameEditor
EN

Stack Overflow用户
提问于 2012-10-20 23:08:22
回答 3查看 2.3K关注 0票数 0

我想实现一个自定义的FileNameEditor;我想设置我自己的过滤器,并且我想能够选择多个文件。

代码语言:javascript
复制
public class Settings
{
    [EditorAttribute(typeof(FileNamesEditor), typeof(System.Drawing.Design.UITypeEditor))]
    public string FileNames { get; set; }
}

public class FileNamesEditor : FileNameEditor
{
    protected override void InitializeDialog(OpenFileDialog openFileDialog)
    {
        openFileDialog.Multiselect = true;
        openFileDialog.Filter = "Word|*.docx|All|*.*";
        base.InitializeDialog(openFileDialog);

    }
}

这会忽略filter属性,尽管我可以选择多个文件,但不能将它们分配给我的Settings.FileNames属性,因为Settings.FileNames是string[]类型,而派生类的结果是string。我如何告诉我的派生类返回openFileDialog的FileNames,以及如何使过滤器工作?我遗漏了什么?

EN

回答 3

Stack Overflow用户

发布于 2013-09-25 16:24:08

原来的代码对我来说是有效的,除了需要重新排序。您需要在更改之前调用base.Initialize,否则它们会被覆盖(调试会很好地显示出来)

代码语言:javascript
复制
public class FileNamesEditor : FileNameEditor
{
    protected override void InitializeDialog(OpenFileDialog openFileDialog)
    {
        base.InitializeDialog(openFileDialog);
        openFileDialog.Multiselect = true;
        openFileDialog.Filter = "Word|*.docx|All|*.*";
    }
}
票数 3
EN

Stack Overflow用户

发布于 2012-10-20 23:59:15

也许可以为string[]使用ArrayEditor

代码语言:javascript
复制
public class Settings
{
  [EditorAttribute(typeof(System.ComponentModel.Design.ArrayEditor),  typeof(System.Drawing.Design.UITypeEditor))]
  public string[] FileNames { get ; set; }
}
票数 0
EN

Stack Overflow用户

发布于 2012-10-21 08:16:40

好的,它是这样工作的.

代码语言:javascript
复制
public class FileNamesEditor : UITypeEditor
{
    private OpenFileDialog ofd;
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.Modal;
    }
    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        if ((context != null) && (provider != null))
        {
            IWindowsFormsEditorService editorService =
            (IWindowsFormsEditorService)
            provider.GetService(typeof(IWindowsFormsEditorService));
            if (editorService != null)
            {
                ofd = new OpenFileDialog();
                ofd.Multiselect = true;
                ofd.Filter = "Word|*.docx|All|*.*";
                ofd.FileName = "";
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    return ofd.FileNames;
                }
            }
        }
        return base.EditValue(context, provider, value);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12989745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档