HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Végtelenített ProgressBar kontrol készítése


Példaprogram letöltése

10644 bájt

Készítünk most egy olyan színátmenetes ProgressBar-hoz hasonló kontrolt, mely folyamatosan működik. Ezt olyan folyamatok jelzésére használhatjuk alkalmazásunkban, melyben nem lehet meghatározni, hogy meddig tart az adott művelet, de azért szeretnénk valamilyen módon jelezni a felhasználó felé, hogy alkalmazásunk még működik, nem fagyott le.

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();
    }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 545. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |