11 Stimmen

Wie kann ich das PropertyGrid dazu zwingen, einen benutzerdefinierten Dialog für eine bestimmte Eigenschaft anzuzeigen?

Ich habe eine Klasse mit einer Zeichenfolgeneigenschaft, die sowohl einen Getter als auch einen Setter hat und oft so lang ist, dass das PropertyGrid den Zeichenfolgenwert abschneidet. Wie kann ich das PropertyGrid dazu zwingen, eine Auslassung anzuzeigen und dann einen Dialog zu starten, der ein mehrzeiliges Textfeld für eine einfache Bearbeitung der Eigenschaft enthält? Ich weiß wahrscheinlich, dass ich irgendeine Art von Attribut auf der Eigenschaft setzen muss, aber welches Attribut und wie? Muss mein Dialog eine spezielle Designer-Schnittstelle implementieren?

Update: Diese Antwort ist wahrscheinlich die Antwort auf meine Frage, aber ich konnte sie nicht durch Suche finden. Meine Frage ist allgemeiner, und ihre Antwort kann verwendet werden, um jeden beliebigen benutzerdefinierten Editor zu erstellen.

20voto

Marc Gravell Punkte 970173

Sie müssen ein [Editor(...)] für die Eigenschaft festlegen und ihm einen UITypeEditor geben, der die Bearbeitung durchführt; so (mit Ihrem eigenen 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());
            // aktualisieren usw.
        }
        return value;
    }
}

Sie könnten in der Lage sein, einen vorhandenen Editor aufzuspüren, indem Sie sich vorhandene Eigenschaften ansehen, die sich so verhalten, wie Sie es möchten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X