Multi-line string in a PropertyGrid
Asked Answered
M

4

35

Is there a built-in editor for a multi-line string in a PropertyGrid.

Multiplicate answered 24/9, 2008 at 21:14 Comment(0)
M
57

I found that System.Design.dll has System.ComponentModel.Design.MultilineStringEditor which can be used as follows:

public class Stuff
{
    [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
    public string MultiLineProperty { get; set; }
}
Multiplicate answered 24/9, 2008 at 21:46 Comment(8)
msdn.microsoft.com/en-us/library/… indicates that it is in 2.0, 3.0, and 3.5.Multiplicate
How to use this? I am trying to write [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))] [CategoryAttribute("Misc"), Description("All http headers for this mail."), DisplayName("HTTP Headers")] public string HttpHeaders { get { return mail.HttpHeaders; } } but this does not display HttpHeaders as multiline.Panaggio
It is a multiline editor so I think you would only see a difference when editing, so it would only apply to properties with a public setter.Multiplicate
Thanks fryguybob! Do you know a way to SHOW multiline string in a grid? Not to edit? Thanks!Panaggio
UITypeEditor is in the namespace System.Drawing.DesignEquipage
I can't find the MultilineStringEditor in the System.Design.dll of .Net Framework 4.6.1. Has it been removed or am I just blind?Gleeson
To use this you'll need to add the System.Design.dll as a reference to your project.Benco
How to do this the propertygrid of the wpf extended libToitoiboid
M
2

No, you will need to create what's called a modal UI type editor. You'll need to create a class that inherits from UITypeEditor. This is basically a form that gets shown when you click on the ellipsis button on the right side of the property you are editing.

The only drawback I found, was that I needed to decorate the specific string property with a specific attribute. It's been a while since I had to do that. I got this information from a book by Chris Sells called "Windows Forms Programming in C#"

There's a commercial propertygrid called Smart PropertyGrid.NET by VisualHint.

Martial answered 24/9, 2008 at 21:26 Comment(0)
T
2

We need to write our custom editor to get the multiline support in property grid.

Here is the customer text editor class implemented from 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;
    }
}

Write your custom property grid and apply this Editor attribute to the property

class CustomPropertyGrid
{
    private string multiLineStr = string.Empty;

    [Editor(typeof(MultiLineTextEditor), typeof(UITypeEditor))]
    public string MultiLineStr
    {
        get { return multiLineStr; }
        set { multiLineStr = value; }
    }
}

In main form assign this object

 propertyGrid1.SelectedObject = new CustomPropertyGrid();
Twila answered 8/3, 2016 at 11:48 Comment(0)
S
0

Yes. I don't quite remember how it is called, but look at the Items property editor for something like ComboBox

Edited: As of @fryguybob, ComboBox.Items uses the System.Windows.Forms.Design.ListControlStringCollectionEditor

Snowmobile answered 24/9, 2008 at 21:14 Comment(1)
ComboBox.Items uses the System.Windows.Forms.Design.ListControlStringCollectionEditor, I don't think that is quite what I'm looking for, but it is close.Multiplicate

© 2022 - 2024 — McMap. All rights reserved.