Stringa multilinea in un PropertyGrid
-
02-07-2019 - |
Domanda
Esiste un editor integrato per una stringa multilinea in un PropertyGrid
.
Soluzione
Ho scoperto che System.Design.dll
ha System.ComponentModel.Design.MultilineStringEditor
che può essere utilizzato come segue:
public class Stuff
{
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public string MultiLineProperty { get; set; }
}
Altri suggerimenti
No, dovrai creare quello che viene chiamato un editor di tipo UI modale. Dovrai creare una classe che eredita da UITypeEditor. Questo è fondamentalmente un modulo che viene mostrato quando fai clic sul pulsante con i puntini di sospensione sul lato destro della proprietà che stai modificando.
L'unico inconveniente che ho riscontrato è che avevo bisogno di decorare la proprietà stringa specifica con un attributo specifico. È passato un po 'di tempo da quando ho dovuto farlo. Ho ricevuto queste informazioni da un libro di Chris Sells intitolato "Programmazione di Windows Form in C #"
Esiste un propertygrid commerciale chiamato Smart PropertyGrid.NET di VisualHint.
Sì. Non ricordo bene come si chiama, ma guardo l'editor delle proprietà Items per qualcosa come ComboBox
Modificato: a partire da @fryguybob, ComboBox.Items utilizza System.Windows.Forms.Design.ListControlStringCollectionEditor
Dobbiamo scrivere il nostro editor personalizzato per ottenere il supporto multilinea nella griglia delle proprietà.
Ecco la classe dell'editor di testo del cliente implementata da 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;
}
}
Scrivi la tua griglia di proprietà personalizzata e applica questo attributo Editor alla proprietà
class CustomPropertyGrid
{
private string multiLineStr = string.Empty;
[Editor(typeof(MultiLineTextEditor), typeof(UITypeEditor))]
public string MultiLineStr
{
get { return multiLineStr; }
set { multiLineStr = value; }
}
}
Nella forma principale assegnare questo oggetto
propertyGrid1.SelectedObject = new CustomPropertyGrid();