C# - PropertyGrid felhasználása saját osztályhoz

forráskód letöltése
Múlt heti „Tulajdonságok ablakának felhasználása saját alkalmazásban” című cikkünkben bemutattuk, hogy miként tudjuk a Visual Studio.NET Properties ablakát saját alkalmazásunkba beépíteni és ott használni. Most azt vizsgáljuk meg, hogy miként használható fel ez az ablak olyan esetben, amikor saját objektumot hozunk létre és ehhez szeretnénk felhasználni a PropertyGrid-et.
A mellékelt példa megnyitása előtt szükséges a PropertyGrid komponenst telepíteni. Ehhez kattintsunk jobb gombbal a ToolBox-on, majd válasszuk a Customize ToolBox menüpontot. A megjelenő ablakban válasszuk a .NET Frameworks Components lapot, majd keressük elő a PropertyGrid elemet. Az előtte lévő CheckBox-ot jelöljük ki és zárjuk le OK-val az ablakot. Ekkor a ToolBox-ban megjelenik egy új komponens PropertyGrid névvel. Ez lesz a Visual Studio.NET-ben lévő Properties nevű ablak komponense.
A fenti feladat megvalósításához persze szükségünk lesz egy saját osztályra, így kezdjük ennek elkészítésével, mely a mellékelt Class1.cs forráskódban található.
A létrehozandó osztályban lesz három property, mindegyik sztring típusú. Funkciójuk a sztringek tárolásában ki is merül, a példa egyszerűségének kedvéért. Lesz tehát egy Text1 és Text2 property, melyeket a First kategóriába sorolunk és lesz egy All property, mely a Second kategóriába kerül.
    public class Class1
    {
A property tárolásához létrehozunk három privát sztringet.
      private string FText1;
      private string FText2;
      private string FAll;
Majd a First kategóriába kerül a Text1 és Text2 property.
      [Category("First")] 
      public string Text1
      {
        get{return FText1;}
        set{FText1 = value;}
      }
      [Category("First")] 
      public string Text2
      {
        get{return FText2;}
        set{FText2 = value;}
      }
Végül a Second kategóriában létrehozzuk az All property-t. Ennél az érték kiolvasást úgy végezzük el, hogy az Text1 és Text2 property értékét összeadva szolgáltatjuk a property értékét.
      [Category("Second")] 
      public string All
      {
        get
        {
          FAll = FText1 + " - " + FText2;
          return FAll;
        }
        set{FAll = value;}
      }
    }
A feladatunk következő részében megpróbáljuk rábírni a PropertyGrid-et, hogy jelenítse meg futási időben az osztályunk egy példányát. Ehhez létrehozunk egy változót az új osztályunkból, majd értéket adunk két property-jének, végül PropertyGrid SelectedObject property-jének értékül adjuk az imént létrehozott osztályunk példányát, így az tudni fogja, hogy melyik objektumot kell megjeleníteni.
      protected void button1_Click (object sender, System.EventArgs e)
      {
        Class1 c = new Class1();
        c.Text1 = "Hello";
        c.Text2 = "World";
        propertyGrid1.SelectedObject = c;
      }
Ha mindent jól készítettünk elő, akkor máris látható lesz objektumunk két csoportja a First és Second, valamint a benne lévő property-k, melyeknek akár meg is változtathatjuk az értékeit.