C# - Egyedi vonal rajzolása GDI+ segítségével

forráskód letöltése
Amikor rajzolunk egy vonalat, akkor annál megadhatunk egy-két előre definiált típust, mely alapján a vonal szaggatottan, illetve pontozott vonallal jelenik meg. Ezek között azonban nincs sok választási lehetőség. Szerencsére van megoldás arra, hogy úgy jelenítsünk meg egy szaggatott vonalat, hogy mi határozhatjuk meg, hogy hány pixelnyi vonal után hány pixelnyi szünet legyen.
A megoldáshoz két TrackBar-t használunk. Az egyikkel a vonal hosszát, a másikkal a szünet hosszát szabályozhatjuk. A grafika kirajzolása a Form Paint eseményénél történik.
Itt szükségünk lesz egy tömbre, melyben számok vannak eltárolva. Jelen esetben a két TrackBar aktuális értéke, mely a vonal, illetve a szünet hosszát határozza meg.
    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
      float[] dp = {trackBar1.Value, trackBar2.Value};
Ezt követően létrehozunk egy Pen-t a vonal rajzoláshoz hagyományos módon.
      Pen p = new Pen(Color.Blue, 5);
Majd a DashPattern property-jébe megadjuk az imént létrehozott tömböt, ezzel szabályozhatjuk a vonal folytonossági tulajdonságát.
      p.DashPattern = dp;
Végezetül nincs más tennivalónk, mint a létrehozott ceruzával vonalakat rajzolni.
      e.Graphics.DrawLine(p, new Point(10, 10), new Point(300, 10));
      e.Graphics.DrawLine(p, new Point(10, 10), new Point(300, 300));
      e.Graphics.DrawLine(p, new Point(10, 10), new Point(10, 300));
Lehetőség van arra is, hogy ne csak egy vonal és egy szünet értéket adjunk meg, hanem tetszőleges számút. Ehhez nem kell mást tennünk, mint egy olyan tömböt létrehozni, mely nem csak két számot tartalmaz. Ebben az esetben a vonal és a szünet értékek felváltva kerülnek megadásra a tömbben.
      float[] dp2 = {1, 2, 4, 8, 16};
      Pen p2 = new Pen(Color.Red, 2);
      p2.DashPattern = dp2;
      e.Graphics.DrawLine(p2, new Point(10, 350), new Point(300, 350));
    }