代码之家  ›  专栏  ›  技术社区  ›  fryguybob

属性网格中的多行字符串

  •  30
  • fryguybob  · 技术社区  · 16 年前

    是否有用于多行字符串的内置编辑器 PropertyGrid .

    4 回复  |  直到 6 年前
        1
  •  49
  •   fryguybob    16 年前

    我发现 System.Design.dll System.ComponentModel.Design.MultilineStringEditor 其用途如下:

    public class Stuff
    {
        [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
        public string MultiLineProperty { get; set; }
    }
    
        2
  •  2
  •   Hector Sosa Jr    16 年前

    不需要,您需要创建一个所谓的模式UI类型编辑器。您需要创建一个从UITypeEditor继承的类。这基本上是一个当您单击正在编辑的属性右侧的省略号按钮时显示的表单。

    我发现的唯一缺点是,我需要用一个特定的属性来修饰特定的字符串属性。我已经很久没有这样做了。我从Chris的一本书中得到了这个信息,书名为“C中的Windows窗体编程”。

    有一个商业地产网格 Smart PropertyGrid.NET 通过视觉提示。

        3
  •  0
  •   community wiki 2 revs Ilya Ryzhenkov    16 年前

    对。我不太记得它是如何被调用的,但是请查看items属性编辑器中的ComboBox之类的内容。

    编辑时间:从@fryguybob开始,ComboBox.items使用system.windows.forms.design.listcontrolStringCollectionEditor

        4
  •  0
  •   Jimi    6 年前

    我们需要编写自定义编辑器以在属性网格中获得多行支持。

    下面是从中实现的客户文本编辑器类 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();