C# - Saját kontrol létrehozása

forráskód letöltése
A Toolbox palettáin számos komponens, kontrol kapott helyet. Ha viszont olyan speciális feladatunk van, melyhez egyik sem felelne meg, viszont mivel sok helyen kellene használnunk azt, így jó volna, ha lenne ilyen, akkor már csak egy lehetőségünk marad: készítünk egy új kontrolt.
A készítendő kontrolnak mostani példánkban gyakorlati haszna nincs, mivel a cél most a kontrol készítés bemutatása. A feladat tehát a következő: legyen egy olyan kontrol, mely kirajzol egy bezier görbét, viszont annak színét és a vonalvastagságot a Properties ablakon keresztül mi magunk szeretnénk megadni.
A feladat megvalósítása két lépésben történik: először létrehozunk egy DLL-t, melyben a kontrol kap helyet, másodszor pedig egy teszt alkalmazást, ahol fel is használjuk az új kontrolt.
A File - New - Project menüpont választása után a Visual C# Project elmei közül válasszuk a Windows Control Library-t. A projectet ShapeControl-nak nevezzük, a létrejött új kontrol neve pedig UserControl1 lesz.
Először is szükségünk lesz két változóra, melyben tároljuk a görbe színét és a vonalvastagságot.
    private Color color = Color.Red;
    private int linesize = 2;
Létre kell hoznunk két új property-t is e két változóhoz.
Megadhatjuk, hogy melyik kategóriába kerüljön a Properties ablakban az új property.
És egy rövid súgó szöveget is rendelhetünk a property-hez, mely a Properties ablak alján jelenik meg, amikor a property aktuálisan kijelölt.
  [
    Category("Tulajdonság"),
    Description("A görbe színe")
    ]
A property neve Color lesz.
A get olvassa a color változóból az aktuális értékét a property-nek.
    public Color Color
    {
      get
      {
        return color;
      }
A set pedig az értékadáskor kap szerepet: itt változik meg a color változó értéke, mely esemény után az Invalidate hívással újra is kell rajzoltatnunk a kontrolunk területét.
      set
      {
        color = value;
        Invalidate();
      }
    }
A vonalvastagsághoz hasonlóan hozhatunk létre property-t.
    [
    Category("Tulajdonság"),
    Description("A görbe vonalvastagsága")
    ]
    public int LineSize
    {
      get
      {
        return linesize;
      }
      set
      {
        linesize = value;
        Invalidate();
      }
    }
Most már csak a görbe kirajzolásáról kell gondoskodnunk. Ehhez a Paint eseményét használjuk fel a kontrolunknak. Itt a Graphics osztály DrawCurve függvényével végezzük a kirajzolást, úgy hogy figyelembe vesszük a color és linesize változók aktuális értékét.
    private void UserControl1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
      Graphics g = e.Graphics;
      Pen pen = new Pen(color, linesize);
      Point[] po = {new Point(10, 10), new Point(18, 50), new Point(150, 10), new Point(150, 140)};
      g.DrawCurve(pen, po);
    }
Ezek után fordítsuk le a DLL-t, majd nézzük miként használhatjuk ezt fel, de előtte hozzunk létre egy új, Windows Application típusú projektet, mely a teszt alkalmazás lesz. Ha ez adott, akkor kattintsunk a Toolbox-on jobb gombbal és válasszuk az Add Tab menüpontot, majd írjuk be, hogy Software Online. Ezzel létrehoztunk egy új palettát a saját komponenseink, kontroljaink számára. Tegyük most ezt aktívvá, majd ismét jobb gomb és Customize menüpont. A megjelenő ablakban a .NET Framework Componenst lapon kattintsunk a Browse gombra és keressük elő az imént lefordított ShapeControl.dll-t.
Ekkor a listában megjelenik egy UserControl1 kezdetű sor. A sor elején lévő chekcbox-ot válasszuk ki, majd OK gomb. Ekkor megjelenik a palettán egy UserControl1 nevű új kontrol, melyet most már akárhány példányban elhelyezhetünk alkalmazásainkban. Egy-egy UserControl1-re kattintva a Properties ablakban a Tulajdonság csoport Color és LineSize property-k állításával már program szerkesztési időben is állíthatjuk a görbénk kinézetét.