Domanda

Esiste un editor integrato per una stringa multilinea in un PropertyGrid .

È stato utile?

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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top