2009-08-18 8 views
1

Ich habe versucht, einen Visualizer für IDictionary oder ICollectionWie erstellt man einen Visual-Studio String Visualizer?

Dann wie die einfachen Visualizer zu erzeugen (ohne Dialog, ich habe die ususal Zeichenfolge Visualizer bedeuten, die angezeigt wird, wenn die Variable schweben, siehe Bild unten), ich mag, dass meine Gewohnheit machen Ich möchte die Sammlung in die Liste ihres Typs (IE StringCollection to List (Of String) oder List) umwandeln, und dann kann ich sie im Visualizer sehen. Oder für Wörterbücher zeigen Sie Listen Visualizer für Schlüssel und für Werte.

Irgendwelche Ideen wie zu implementieren oder sogar wie zu starten?

Ich werde meine Frage bald aktualisieren.

Das ist etwas, was ich dachte:

using System.Collections.Specialized; 
using System.Collections; 

namespace ConsoleApplication2 
{ 
    static class Program 
    { 
     static void Main(string[] args) 
     { 
      System.Collections.Specialized.StringCollection collection = new StringCollection(); 
      collection.AddRange(new string[] { "string1", "string2", "sting3" }); 
      string[] visualizable = collection.ConvertToVisualizableList(); 

      Dictionary<string,string> dic = new Dictionary<string,string> 
      { 
       {"key1","value"}, 
       {"key2","value"} 
      }; 
      string[,]  visualizable2 = dic.ConvertToVisualizableDictionary(); 



     } 

     static string[] ConvertToVisualizableList(this IList collection) 
     { 
      lock (collection) 
      { 
       if (collection == null) return null; 
       int length = collection.Count; 
       string[] list = new string[length]; 

       for (int i = 0; i < length; i++) 
       { 
        object item = collection[i]; 
        if (item != null) list[i] = item.ToString(); 
       } 

       return list.ToArray(); 
      } 
     } 

     static string[,] ConvertToVisualizableDictionary(this IDictionary dictionary) 
     { 
      if (dictionary == null) return null; 
      int length = dictionary.Count; 
      string[,] list = new string[length, 2]; 

      int i = 0; 
      foreach (object item in dictionary.Keys) 
      { 
       list[i, 0] = item.ToString(); 
       object value = dictionary[item]; 
       if(value!=null) list[i, 1] = value.ToString(); 
       i++; 
      } 
      return list; 
     } 
    } 
} 

Dies sind VS Visualizer für Array und multidimentional Arrays:

alt text

Ich möchte für ICollection etwas ähnliches verwenden (oder IList), IDictionary usw.

Beachten Sie, dass der Visualizer in Arrays alle verschachtelten Objcet zeigt. Das ist eigentlich das, was ich erreichen wollen:

d.

Versuchen Sie, eine Liste zu visualisieren, und Sie werden sehen, dass es einen privaten Wert _items gibt, so dass Sie seine Elemente sehen können. Ich möchte etwas ähnliches in Sammlung und Wörterbuch erreichen.

Antwort

1

Es gibt eine Reihe von Beispielen zu Code Project. Dies ist der eine, den ich am meisten Erfahrung mit: DataSet Visualizer

ich habe es installiert und verwendet es selbst, damit ich weiß, dass es funktioniert. Es ist fortgeschrittener als Sie benötigen, da es tatsächlich ganze ADO-Datensätze anzeigt, aber der Code sollte ziemlich einfach zu ändern sein.

Hier sind ein paar andere Verbindungen als auch zu prüfen:

Project 1

Project 2

+0

Eigentlich was ich will ist die Kontrolle der Bereich, wo die Zeichenfolge angezeigt wird, ich möchte, dass dies ein Ort für den Visualizer werden soll, ist das möglich? – Shimmy

+1

Ich weiß, dass die Visualizer-API breit und leistungsfähig ist, aber Sie müssen sich die Hände schmutzig machen. Hat einer dieser drei Links überhaupt so gut funktioniert, wie Ihr Visualizer arbeiten soll? ich würde eins auswählen und damit laufen. Es gibt Dutzende von Artikeln aus einer grundlegenden Google-Suche: http://www.google.com/search?rlz=1C1GGLS_en-USUS293US304&sourceid=chrome&ie=UTF-8&q=visual+studio+2005+custom+visualizer Und das Eine von Dr. Dobb sieht besonders vielversprechend aus: http: //www.ddj.com/Windows/184406197 –

+0

Vielen Dank, war sehr hilfreich! Wenn/wenn ich den Visualizer erstellen werde, werde ich es hier posten! – Shimmy