我有一个带有字符串属性的类,同时具有getter和setter,它通常很长,以至于PropertyGrid会截断字符串值.如何强制PropertyGrid显示省略号,然后启动包含多行文本框的对话框以便于编辑属性?我知道我可能要在属性上设置某种属性,但属性和方法是什么?我的对话框是否必须实现一些特殊的设计器界面?
更新: 这可能是我的问题的答案,但我无法通过搜索找到它.我的问题更为通用,其答案可用于构建任何类型的自定义编辑器.
你需要设置一个[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; } }
您可能会通过查看行为符合您想要的现有属性来追踪现有的编辑器.