Como posso forçar o PropertyGrid para mostrar um diálogo personalizada para uma propriedade específica?

StackOverflow https://stackoverflow.com/questions/359690

  •  21-08-2019
  •  | 
  •  

Pergunta

Eu tenho uma classe com uma propriedade string, tendo ambos um getter e um setter, que muitas vezes é tão longa que o PropertyGrid trunca o valor da cadeia. Como posso forçar o PropertyGrid para mostrar uma elipse e, em seguida, lançar um diálogo que contém uma caixa de texto de várias linhas para facilitar a edição da propriedade? Eu sei que provavelmente tem que definir algum tipo de atributo na propriedade, mas o atributo e como? O meu diálogo tem de implementar alguma interface especial designer?

Update: Este é provavelmente a resposta à minha pergunta, mas eu não poderia encontrá-lo, procurando. A minha pergunta é mais geral, e sua resposta pode ser usado para construir qualquer tipo de editor personalizado.

Foi útil?

Solução

Você precisa definir um [Editor(...)] para a propriedade, dando-lhe um UITypeEditor que faz a edição; assim (com o seu próprio editor ...)

using System;
using System.ComponentModel;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;


static class Program
{
    static void Main()
    {
        Application.Run(new Form { Controls = { new PropertyGrid { SelectedObject = new Foo() } } });
    }
}



class Foo
{
    [Editor(typeof(StringEditor), typeof(UITypeEditor))]
    public string Bar { get; set; }
}

class StringEditor : UITypeEditor
{
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.Modal;
    }
    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        IWindowsFormsEditorService svc = (IWindowsFormsEditorService)
            provider.GetService(typeof(IWindowsFormsEditorService));
        if (svc != null)
        {
            svc.ShowDialog(new Form());
            // update etc
        }
        return value;
    }
}

Você pode ser ablt para rastrear um editor existente olhando para propriedades existentes que se comportam como você deseja.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top