PropertyGrid Multiselect



  • Hallo!

    Ich verwende ein PropertyGrid und habe mir meinen eigenen UITypeEditor geschrieben.(Das hat lange gedauert bis ich mich da zurecht gefunden habe!)
    Aber nun funktioniert es Gott sei Dank.
    Probleme macht mir eigentlich nur das Multiselect. Weiß einfach nicht was ich da zurückbekomme. D.h. was passiert wenn ich dem PropertyGrid mehr als ein Objekt übergebe? Bei allen Membervariablen die man nicht selber behandelt wird einfach das Feld leer gelassen(blank). Für meine eigenen Datentypen muss ich das ganze ja selber behandlen! Leider komme ich da auf keinen grünen Zweig, da ich schon ganz am Anfang hänge. Was bekommt man denn in der Methode

    public override object EditValue(ITypeDescriptorContext context,IServiceProvider provider,object value)
    {
          IWindowsFormsEditorService wfes = provider.GetService(typeof(IWindowsFormsEditorService)) as
            IWindowsFormsEditorService;
    
        if (wfes == null) { return value; }
    
        UIRoutingTableEditorForm form = new UIRoutingTableEditorForm();
    
        if (value != null)
        {
             if (value is List<string>)
             {
                form.EditorValue = (List<string>)value;                    
             }
             else
             {
                 MessageBox.Show(value.ToString());
             }
        }
        form._wfes = wfes;
        form.TopLevel = false;
    
        wfes.DropDownControl(form);
        value = form.EditorValue;
        return value;
    }
    

    als value zurück?

    Weitere Frage: gibt es vielleicht eine Mehtode die ich überschreiben kann damit ich mir das Multiselect handling selber machen kann? D.h. ich lege selber fest was da zurückgegeben wird.

    Oder hat vielleicht jemand überhaupt eine andere Idee wie man das Lösen könnte.
    Ich habe ja eine String List,bei Multiselect häte ich gerne das eine Liste zurückgegeben wird nur mit den strings die in allen Listen des Selectionsets vorkommen

    Lg THE_ONE



  • Schau doch einfach mal mit dem Debugger rein, was "value" für nen Typ hat.



  • Mann, manchmal sieht man den Wald vor lauter Bäume nicht mehr! Danke für deinen Tipp.
    Was aber kann ich mit dieser Information anfangen.

    Wenn ich ein Element wähle funktioniert alles so wie es soll!
    Wenn ich Element mit unterschiedlichen Listen wähle -> dann bekomme ich null zurück.
    Wähle ich mehrere Elemente mit gleichem Inhalt. bekomme ich folgendes zurück:
    http://farm4.static.flickr.com/3462/3837301421_96952795dd_o.png

    Wie komme ich nun an die Elemente? gar ned oder?? da nicht öffentlich. 😞

    Lg THE_ONE

    Das was ich erreichen will funktioniert also nicht. Alle Elemente zurückgeben die in allen selektierten Elementen vorkommen. Also auch wenn Elemente nicht exakt gleich sind sondern nur ein paar gleiche Elemente haben.

    Beispiele:
    Element1.List: Hund,Katze,Maus,Pferd
    Element2.List: Hund,Katze,Maus,Pferd
    Selektieren ich diese zwei Elemente bekomme ich das was man im Screenshot sieht!

    Element1.List: Hund,Katze,Maus,Pferd
    Element2.List: Hund,Pferd
    Selektiere ich diese zwei Elemente bekomme ich null zurück
    Schön wäre es aber wenn ich eine Liste mit: Hund,Pferd zurückbekommen würde.



  • /// Nimm das: (für das erste Problem)
    
    var list = value as ICollection; // oder ICollection
    if (list != null)
       // [...]
    


  • Schaust Du ab und an auch mal in die MSDN ?



  • Knuddlbaer schrieb:

    Schaust Du ab und an auch mal in die MSDN ?

    Ja oft genug! Nur leider weiß ich oft nicht nach was ich suchen soll.
    Habe immer nach MultiMergeCollection gesucht und leider nichts gefunden.

    @archimedischer Körper 😃 (Rhombicosidodecahedron )
    Danke,Danke,Danke,Danke,....

    if (value is List<string>)
    {
        form.EditorValue = (List<string>)value;                    
    }
    else
    {
        var list = value as ICollection; // oder ICollection
        if (list != null)
        {
            string[]help = new string[list.Count];
            list.CopyTo(help,0);
            form.EditorValue = new List<string>(help);                        
        }
    }
    

    Problem 1 ist nun gelöst, bei Selektion von:
    Element1.List: Hund,Katze,Maus,Pferd
    Element2.List: Hund,Katze,Maus,Pferd
    bekomme ich nun: Hund,Katze,Maus,Pferd zurück

    Für Problem 2 habe ich aber noch keine Lösung, habt ihr vielleicht Ideen mit was ich es probieren könnte?

    Lg und vielen Dank nochmal für eure Hilfe und Geduld


Anmelden zum Antworten