【发布时间】:2010-09-12 21:39:31
【问题描述】:
PropertyGrid 中是否有用于多行字符串的内置编辑器。
【问题讨论】:
标签: c# .net winforms propertygrid
PropertyGrid 中是否有用于多行字符串的内置编辑器。
【问题讨论】:
标签: c# .net winforms propertygrid
我发现System.Design.dll有System.ComponentModel.Design.MultilineStringEditor,可以这样使用:
public class Stuff
{
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public string MultiLineProperty { get; set; }
}
【讨论】:
不,您需要创建所谓的模态 UI 类型编辑器。您需要创建一个继承自 UITypeEditor 的类。这基本上是当您单击正在编辑的属性右侧的省略号按钮时显示的表单。
我发现的唯一缺点是我需要用特定的属性来装饰特定的字符串属性。我不得不这样做已经有一段时间了。我从 Chris Sells 的一本名为“C# 中的 Windows 窗体编程”的书中获得了这些信息
VisualHint 有一个名为 Smart PropertyGrid.NET 的商业地产网格。
【讨论】:
我们需要编写自定义编辑器来获得属性网格中的多行支持。
这是从UITypeEditor实现的客户文本编辑器类
public class MultiLineTextEditor : UITypeEditor
{
private IWindowsFormsEditorService _editorService;
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
_editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
TextBox textEditorBox = new TextBox();
textEditorBox.Multiline = true;
textEditorBox.ScrollBars = ScrollBars.Vertical;
textEditorBox.Width = 250;
textEditorBox.Height = 150;
textEditorBox.BorderStyle = BorderStyle.None;
textEditorBox.AcceptsReturn = true;
textEditorBox.Text = value as string;
_editorService.DropDownControl(textEditorBox);
return textEditorBox.Text;
}
}
编写您的自定义属性网格并将此编辑器属性应用于属性
class CustomPropertyGrid
{
private string multiLineStr = string.Empty;
[Editor(typeof(MultiLineTextEditor), typeof(UITypeEditor))]
public string MultiLineStr
{
get { return multiLineStr; }
set { multiLineStr = value; }
}
}
在主窗体中分配这个对象
propertyGrid1.SelectedObject = new CustomPropertyGrid();
【讨论】:
是的。我不太记得它是如何调用的,但请查看 Items 属性编辑器中的 ComboBox 之类的东西
已编辑:截至@fryguybob,ComboBox.Items 使用 System.Windows.Forms.Design.ListControlStringCollectionEditor
【讨论】: