当前位置:  开发笔记 > 开发工具 > 正文

如何强制PropertyGrid显示特定属性的自定义对话框?

如何解决《如何强制PropertyGrid显示特定属性的自定义对话框?》经验,为你挑选了1个好方法。

我有一个带有字符串属性的类,同时具有getter和setter,它通常很长,以至于PropertyGrid会截断字符串值.如何强制PropertyGrid显示省略号,然后启动包含多行文本框的对话框以便于编辑属性?我知道我可能要在属性上设置某种属性,但属性和方法是什么?我的对话框是否必须实现一些特殊的设计器界面?

更新: 这可能是我的问题的答案,但我无法通过搜索找到它.我的问题更为通用,其答案可用于构建任何类型的自定义编辑器.



1> Marc Gravell..:

你需要设置一个[Editor(...)]属性,给它一个UITypeEditor编辑; 像这样(用你自己的编辑......)

using System;
using System.ComponentModel;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;


static class Program
{
    static void Main()
    {
        Application.Run(new Form { Controls = { new PropertyGrid { SelectedObject = new Foo() } } });
    }
}



class Foo
{
    [Editor(typeof(StringEditor), typeof(UITypeEditor))]
    public string Bar { get; set; }
}

class StringEditor : UITypeEditor
{
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.Modal;
    }
    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        IWindowsFormsEditorService svc = (IWindowsFormsEditorService)
            provider.GetService(typeof(IWindowsFormsEditorService));
        if (svc != null)
        {
            svc.ShowDialog(new Form());
            // update etc
        }
        return value;
    }
}

您可能会通过查看行为符合您想要的现有属性来追踪现有的编辑器.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有