
A mellékelt példa lefordítása után az EndlessProgress kontrol felvehető a Toolbox-ra, ha azon a jobb gombbal kattint, majd a Customize ToolBox menüpontot választja és előkeresi a lefordított EXE-t.
A kontrol használatához a Color1, Color2 property-kben állítsuk be a két kívánt színt, mely között a színátmenet megvalósul. A Step property-ben minél nagyobb a megadott szám, annál gyorsabban mozog a színátmenet.
Nézzük most a kontrol kinézetét előállító kódot, mely annak Paint eseményénél fut le. A színátmenethez létrehozunk egy LinearGradientBrush osztályt, melynél beállítjuk a WrapMode property-n keresztül, hogy vízszintesen tükrözve legyen, így a színátmenet úgy jelenik meg mintha nem is két, hanem három szín között menne át oly módon, hogy először a Color1 és Color 2 között történik meg, majd a Color2 és Color1 között.
A TranslateTransform függvény használatával érjük el azt, hogy a színátmenet vízszintes irányban el legyen tolva. Mivel ennek az eltolásnak a mértékét majd folyamatosan növeljük, így a kontrol „életre kell” és a színátmenet folyamatosan mozogni fog.
Végezetül már csak kirajzolunk egy téglalapot a létrehozott színátmenetes ecset felhasználásával, a kontrol teljes területére.
private void EndlessProgressControl_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
LinearGradientBrush b = new LinearGradientBrush(this.Bounds, Color1, Color2, 0, false);
b.WrapMode = WrapMode.TileFlipX;
b.TranslateTransform(position, 0, MatrixOrder.Append);
e.Graphics.FillRectangle(b, 0, 0, this.Width, this.Height);
}
Amikor a kontrolunk láthatósága változik, akkor indítunk egy Timer kontrol segítségével egy időzítést, mely folyamatosan növeli majd a színátmenet eltolását.
Ha a Timer még nem került létrehozásra, akkor azt is itt tesszük meg.
protected override void OnVisibleChanged(EventArgs e)
{
if (Visible)
{
if (timer == null)
{
timer = new System.Windows.Forms.Timer();
timer.Interval = 20;
Az időzítő Tick eseményéhez az OnTick függvényünket rendeljük, így ez kerül meghívásra amikor a beállított idő letelik.
timer.Tick += new EventHandler(OnTick);
}
timer.Start();
}
else
{
if (timer != null)
{
timer.Stop();
}
}
base.OnVisibleChanged(e);
}
Amikor az OnTick lefut, akkor növeljük színátmenet eltolását, majd érvénytelenítjük a kontrol területét az Invalidate függvény hívásával, mely a Paint esemény lefutását eredményezi és így újra kirajzolásra kerül a kontrol képe.
public void OnTick(object sender, EventArgs args)
{
position += step;
if (position > Width)
{
position = -Width;
}
this.Invalidate();
}