A kontrol funkcionalitásában nem különbözik a hagyományos TrackBar kontroltól, csupán a külsején csiszoltunk. A kontrol felületét egy színátmenettel töltöttük ki, szükség esetén – a megfelelő property igazra állításával – az aktuális értéket is jelzi százalékban.
A kontrol fölött lenyomva az egeret elérhető, hogy a Value property értékén változtassunk, csakúgy, mint az eredeti kontrolban. A funkcionalitás azonossága miatt létrehoztuk azokat a property-ket, melyek az eredeti kontrolban is megtalálhatók. Ezek a következők:
Valamint újakat is létrehoztunk:
- StartColor: a színátmenet kezdőszíne
- EndColor: a színátmenet záró színe
- ShowPercentage: jelezze-e a kontrol az értéket százalékban
Az egéresemények kezelésére a következő metódusokat írtuk felül:
- OnMouseDown
- OnMouseMove
- OnMouseUp
Az egér lenyomásakor és mozgatásakor megvizsgáljuk, hogy a téglalap melyik pozíciójában található éppen a kurzor és a téglalap kezdőpontja, valamint a kurzor pontja közötti résztéglalap területét kitöltjük egy másik színnel, jelezve az aktuális értéket.
Ezekben a műveletekben segítenek az Optimizing és a SetValue segédfüggvények.
Az OnPaint metódusban rajzoljuk ki a kontrolt a pillanatnyi értékekkel. Első lépésben létrehozzuk a szükséges ecseteket a kitöltés függvényében.
base.OnPaint(e);
if (back == null)
{
back = new LinearGradientBrush(new Point(0, 0),new Point(ClientSize.Width, 0),StartColor,EndColor);
if (BackgroundImage != null)
{
back = new TextureBrush(BackgroundImage);
}
}
Amennyiben a százalékos megjelenítést választjuk, akkor annak a karakterlánca, ellenkező esetben a kontrol neve jelenik meg a kontrol felületén.
if (ShowPercentage)
{
dValue = Convert.ToInt32((int)(percentValue * 100f));
display = Convert.ToString((int)(percentValue * 100f)) + "%";
}
else
{
display = text;
}
A művelet záróakkordja, hogy a megfelelő színnel kitöltjük a téglalapot, majd a felületre írjuk a megfelelő karakterláncot.
e.Graphics.FillRectangle(back,ClientRectangle);
e.Graphics.FillRectangle(dim,client);
e.Graphics.Flush();
if (display != null && display.Length > 0)
{
e.Graphics.DrawString(display, Font, new SolidBrush(ForeColor), textRect);
}
A kliensalkalmazásban a kontrol ValueChanged eseményéhez deklaráltunk egy kezelőmetódust.
gtbControl1.ValueChanged += new EventHandler(gtbControl1_ValueChanged);
Ebben egyszerűen – úgy, mint az eredeti kontrolban – lekérdezzük a Value property értékét.
label4.Text = "Az aktuális érték: " + gtbControl1.Value.ToString();