Wie kann ich die Property zwingen, einen benutzerdefinierten Dialog für eine bestimmte Eigenschaft zu zeigen?

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

  •  21-08-2019
  •  | 
  •  

Frage

Ich habe eine Klasse mit einer String-Eigenschaft, die beide einen Getter und einen Setter hat, das oft so lang ist, dass der Property des String-Wert abschneidet. Wie kann ich die Property zwingen, ein Auslassungszeichen zu zeigen, und dann einen Dialog starten, die ein mehrzeiliges Textfeld für die einfache Bearbeitung der Eigenschaft enthält? Ich weiß, ich muss wohl auf dem Grundstück eine Art von Attribut gesetzt, aber was Attribut und wie? Hat mein Dialog einige spezielle Designer-Schnittstelle implementieren?

Update: Diese ist wahrscheinlich die Antwort auf meine Frage, aber ich konnte es nicht finden, indem suchen. Meine Frage ist allgemeiner, und seine Antwort verwendet werden können, um jede Art von benutzerdefinierten Editor zu bauen.

War es hilfreich?

Lösung

Sie benötigen einen [Editor(...)] für die Eigenschaft zu setzen, hat es eine UITypeEditor geben, die das Bearbeiten tut; wie 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());
            // update etc
        }
        return value;
    }
}

Das könnte Sie ablt werden, um einen vorhandenen Editor auf die Spur, indem bestehende Objekte suchen, verhalten sich wie Sie wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top