String multi-line em um propriedadegrid
-
02-07-2019 - |
Pergunta
Existe um editor embutido para uma sequência de várias linhas em um PropertyGrid
.
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();