Multi-line-String in einem Property
-
02-07-2019 - |
Frage
Sie haben einen integrierten Editor für einen mehrzeiligen String in einem PropertyGrid
.
Lösung
Ich fand, dass System.Design.dll
System.ComponentModel.Design.MultilineStringEditor
hat, die verwendet werden können, wie folgt:
public class Stuff
{
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public string MultiLineProperty { get; set; }
}
Andere Tipps
Nein, müssen Sie schaffen, was einen modalen UI-Typ-Editor aufgerufen wird. Sie müssen eine Klasse erstellen, die von UITypeEditor erbt. Dies ist im Grunde eine Form, die angezeigt wird, wenn Sie auf die Ellipsen-Schaltfläche auf der rechten Seite des Objektes klicken Sie bearbeiten.
Der einzige Nachteil ich fand, war, dass ich die spezifische String-Eigenschaft mit einem bestimmten Attribut schmücken benötigt. Es ist schon eine Weile her, seit ich das tun musste. Ich habe diese Informationen aus einem Buch von Chris Sells namens "Windows Forms-Programmierung in C #"
Es gibt eine kommerzielle Property genannt Smart-PropertyGrid.NET von VisualHint.
Ja. Ich verstehe nicht ganz daran erinnern, wie sie genannt wird, aber für so etwas wie ComboBox in der Eigenschaft Items Editor aussehen
Editiert: Ab @fryguybob, ComboBox.Items verwendet die System.Windows.Forms.Design.ListControlStringCollectionEditor
Wir müssen unsere eigene Editor schreiben, um die mehrzeilige Unterstützung in Eigenschaftenraster zu erhalten.
Hier ist der Kunde Texteditor Klasse von 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;
}
}
Schreiben Sie eine benutzerdefinierte Eigenschaft Gitter und gelten für die Eigenschaft dieses Editor Attribut
class CustomPropertyGrid
{
private string multiLineStr = string.Empty;
[Editor(typeof(MultiLineTextEditor), typeof(UITypeEditor))]
public string MultiLineStr
{
get { return multiLineStr; }
set { multiLineStr = value; }
}
}
Hauptform dieses Objekt zuweisen
propertyGrid1.SelectedObject = new CustomPropertyGrid();