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