Question

Existe-t-il un éditeur intégré pour une chaîne multiligne dans un PropertyGrid .

Était-ce utile?

La solution

J'ai constaté que System.Design.dll contient System.ComponentModel.Design.MultilineStringEditor , qui peut être utilisé comme suit:

public class Stuff
{
    [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
    public string MultiLineProperty { get; set; }
}

Autres conseils

Non, vous devrez créer ce qu’on appelle un éditeur de type modal d’UI. Vous devrez créer une classe qui hérite de UITypeEditor. Il s’agit d’un formulaire qui s’affiche lorsque vous cliquez sur le bouton points de suspension situé à droite de la propriété que vous modifiez.

Le seul inconvénient que j'ai trouvé, c'est que je devais décorer la propriété string spécifique avec un attribut spécifique. Cela faisait un moment que je devais faire ça. J'ai eu cette information dans un livre de Chris Sells intitulé "Programmation Windows Forms en C #"

Il existe une propriété commerciale appelée Smart PropertyGrid.NET par VisualHint.

Oui. Je ne me souviens plus très bien comment on l'appelle, mais regardez l'éditeur de propriétés Items pour quelque chose comme ComboBox

Modifié: à compter de @fryguybob, ComboBox.Items utilise System.Windows.Forms.Design.ListControlStringCollectionEditor

Nous devons écrire notre éditeur personnalisé pour obtenir le support multiligne dans la grille de propriétés.

Voici la classe d'éditeur de texte client implémentée à partir 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;
    }
}

Écrivez votre grille de propriétés personnalisée et appliquez cet attribut d'éditeur à la propriété

.
class CustomPropertyGrid
{
    private string multiLineStr = string.Empty;

    [Editor(typeof(MultiLineTextEditor), typeof(UITypeEditor))]
    public string MultiLineStr
    {
        get { return multiLineStr; }
        set { multiLineStr = value; }
    }
}

Dans la forme principale, attribuez cet objet

 propertyGrid1.SelectedObject = new CustomPropertyGrid();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top