Pergunta

Existe um editor embutido para uma sequência de várias linhas em um PropertyGrid.

Foi útil?

Solução

eu achei aquilo System.Design.dll tem System.ComponentModel.Design.MultilineStringEditor que pode ser usado da seguinte maneira:

public class Stuff
{
    [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
    public string MultiLineProperty { get; set; }
}

Outras dicas

Não, você precisará criar o que é chamado de editor de tipo de interface do usuário modal. Você precisará criar uma classe que herda do UityPeeditor. Este é basicamente um formulário que é mostrado quando você clica no botão Ellipsis no lado direito da propriedade que você está editando.

A única desvantagem que encontrei foi que eu precisava decorar a propriedade de string específica com um atributo específico. Já faz um tempo desde que eu tive que fazer isso. Recebi essas informações de um livro de Chris Sells chamado "Programação do Windows Forms em C#"

Há um imóvel comercial chamado Smart PropertyGrid.net por visualhint.

Sim. Não me lembro como é chamado, mas olhe para o editor de propriedades de itens para algo como ComboBox

Editado: A partir de @fryguybob, combmobox.items usa o sistema.windows.forms.design.listcontrolstringcollectioneditor

Precisamos escrever nosso editor personalizado para obter o suporte multilina na rede de propriedades.

Aqui está a classe do editor de texto do cliente implementada de 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;
    }
}

Escreva sua grade de propriedade personalizada e aplique este atributo do editor à propriedade

class CustomPropertyGrid
{
    private string multiLineStr = string.Empty;

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

Na forma principal, atribua este objeto

 propertyGrid1.SelectedObject = new CustomPropertyGrid();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top