Frage

Sie haben einen integrierten Editor für einen mehrzeiligen String in einem PropertyGrid.

War es hilfreich?

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top