HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Százalékot is jelző ProgressBar kontrol


Példaprogram letöltése

12546 bájt

A Visual Studio .NET fejlesztőeszköz ToolBox tálcáján fellelhető ProgressBar kontrol valamilyen oknál fogva folyamatjelzés közben nem jelenít meg semmilyen mérőszámot, melyből következtetni lehetne arra, hogy az adott folyamat hány százaléka zajlott már le, és mennyi van még hátra a befejezésig. Cikkünkben elkészítünk egy saját kontrolt, mely pótolja ezt a kis hiányosságot.

A mellékelt alkalmazás mappájának PPLibrary alkönyvtárában találjuk meg a fejlesztett kontrol forrásállományait, melyek közül a PPControl.cs tartalmazza a kontrol osztályának deklarációját. A kontrol kódját lefordítva állíthatjuk elő a szükséges assembly-t, melyet felhasználhatunk a kontrol ToolBox-n való regisztrálásához. A kontrolt regisztrálva, az tetszőlegesen felhasználható bármely Windows-os alkalmazásban.
A megjelenítés érdekében néhány öröklött property-t felüldefiniáltunk, másokat elrejtettünk, vagyis nem jelennek meg a Propeties dialógusablakban szerkesztési időben.
A kontrol osztályát a Control osztályból származtatjuk, és létrehozunk néhány új property-t a kontrol kerettípusának tárolására, a minimum, és maximum érték tárolására, valamint a folyamatindikátor pillanatnyi értékét tükröző érték tárolására:
private BorderStyle border = BorderStyle.FixedSingle;
private int v = 0;
private int min = 0;
private int max = 100;
A kontrol konstruktorában megadjuk a megjelenésre vonatkozó adatokat:
public PPControl()
{
  SetStyle(ControlStyles.ResizeRedraw
        | ControlStyles.Opaque | ControlStyles.AllPaintingInWmPaint
        | ControlStyles.UserPaint | ControlStyles.DoubleBuffer,
        true);
  TabStop = false;
}
A kontrol OnPaint metódusa az, mely gondoskodik a százalékos érték megjelenítéséről, így lássuk most annak deklarációját. Először lekérdezzük az elérhető Graphics objektumot a metódus paraméteréből:
protected override void OnPaint(PaintEventArgs pe)
{
  Graphics g = pe.Graphics;
Meghatározzuk, hogy a Paint esemény lezajlásának pillanatában mekkora az aktuális, megjelenítendő százalékos érték:
  int range = Maximum - Minimum;
  int pos = range == 0 ? 0 : (Value - Minimum);
  if (range == 0) range = 1;
  int percent = (pos * 100) / range;
Létrehozzuk a kirajzolandó szöveges információt formázó objektumot, valamint a rajzolóeszközök objektumait:
  StringFormat sf = new StringFormat();
  Brush fg = new SolidBrush(ForeColor);
  Brush bg = new SolidBrush(BackColor);
Meghatározzuk a megjelenítendő karakterláncot, valamint annak helyzetét megadjuk a formázó objektumnak:
  sf.Alignment = StringAlignment.Center;
  sf.LineAlignment = StringAlignment.Center;
  string s = string.Format("{0}%", percent);
Lekérdezzük a kontrol kliensterületét:
  Rectangle r = ClientRectangle;
Megrajzoljuk azt a kontrolterületet, mely a már eltelt időt jelzi valamilyen kiválasztott színnel:
  r.Width = (r.Width * pos) / range;
  g.SetClip(r);
  g.FillRectangle(fg, r);
  g.DrawString(s, Font, bg, ClientRectangle, sf);
Majd azt a területet, mely még színezetlen:
  r.X = r.Width;
  r.Width = ClientRectangle.Width - r.X;
  g.SetClip(r);
  g.FillRectangle(bg, r);
  g.DrawString(s, Font, fg, ClientRectangle, sf);
  ...
A választott BorderStyle property-nek megfelelően beállítjuk a kontrol keretét, majd meghívjuk az ősosztály Paint metódusát:
  switch (BorderStyle)
  {
    case BorderStyle.FixedSingle:
      ControlPaint.DrawBorder(g, ClientRectangle, SystemColors.ControlDarkDark,
      ButtonBorderStyle.Solid);
      break;
    case BorderStyle.Fixed3D:
      ControlPaint.DrawBorder3D(g, ClientRectangle, Border3DStyle.Sunken);
      break;
  }      
  base.OnPaint(pe);
}
A kód tartalmaz még néhány deklarációt, melyekkel elrejtjük a Text és BackgroungImage propety-k beállítási lehetőségét a Properties ablakból.
A forráskód utolsó szegmensében („Megváltozott tartalmú property-k” régió) még felülírunk néhány property-t, ezek a TabStop, ForeColor, és BackColor. Ezzel a kontrol kész.
A mellékelt példában egy TrackBar kontrollal együtt helyeztük el a kontrolunkat az alkalmazás Form-ján. A TrackBar kontrol Value értékének megváltozásához kötődő esemény bekövetkezésekor állítjuk a kontrolunk Value értékét is, így tesztelhető a megfelelő érték megjelenítése.

Cikksorozat

#IDKategóriaCikk címeSorozat
2535C#Oracle adatbázis-elérés alapjai1. rész
2546C#SQL utasítások végrehajtása2. rész
2557C#Tárolt eljárások és függvények fejlesztése3. rész
2565C#Csomagok fejlesztése4. rész
2573C#Adatbázis triggerek fejlesztése5. rész
2581C#Kivételek kezelése PL/SQL-ben6. rész
3276C#Kurzorok deklarálása PL/SQL-ben7. rész
3297C#Tömb adattípus létrehozása és kezelése PL/SQL-ben8. rész
3326C#Adatbevitel tömb-adattípussal rendelkező oszlopokba9. rész
3357C#Adattárolás beágyazott tábla-típusú oszlopokban10. rész
3388C#Adatok beszúrása beágyazott táblákba11. rész
3418C#Index létrehozása PL/SQL-ben12. rész
3444C#Szekvenciák használata13. rész
3488C#Adatok betöltése állományokból14. rész
1765DelphiOracle adatbázis-elérés alapjai15. rész
1774DelphiSQL utasítások végrehajtása16. rész
1784DelphiTárolt eljárások és függvények fejlesztése17. rész
1794DelphiCsomagok fejlesztése18. rész
1803DelphiAdatbázis triggerek fejlesztése19. rész
1815DelphiKivételek kezelése PL/SQL-ben20. rész
3256DelphiKurzorok deklarálása PL/SQL-ben21. rész
3287DelphiTömb adattípus létrehozása és kezelése PL/SQL-ben22. rész
3318DelphiAdatbevitel tömb-adattípussal rendelkező oszlopokba23. rész
3348DelphiAdattárolás beágyazott tábla típusú oszlopokban24. rész
3377DelphiAdatok beszúrása beágyazott táblákba25. rész
3408DelphiIndex létrehozása PL/SQL-ben26. rész
3436DelphiSzekvenciák használata27. rész
3467DelphiAdatok betöltése állományokból28. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 88. 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 |