A mellékelt alkalmazásban a kontrolunk a Panel kontrol keretein belül tetszőleges helyre vonszolható, a kontrolra jobb egérgombbal kattintva a felirata módosítható, valamint új kép helyezhető el az eredeti kép helyére. Ehhez a Form nyomógombjára kell kattintani, és a felbukkanó Open File ablakban megkeresni a kívánt képet.
A kontrol property-jei
A kontrol a következő tulajdonságokkal rendelkezik, melyeket szerkesztési időben is elérhetünk.
- Text: a kontrol felirata, mely alapesetben a Name property értéke.
- Image: a megjelenített kép.
- ImageList: a kontrolhoz rendelhető képlista.
- ImageIndex: a kontrolhoz rendelt képlista itt megadott indexű eleme lesz a megjelenített kép.
A kontrol feliratának módosítása
A kontrol feliratának módosításához egy saját osztályú kontrolt használunk, az osztály neve MyTextBox. A szövegmező kontrol az ikon kontrolunk feliratának a helyén jelenik meg, addig rejtve marad.
A szövegmező kontrol figyeli, hogy ENTER-t, vagy ESC billentyűt ütöttük-e le, és ennek megfelelően frissíti, vagy veti el a változtatásokat.
A felirat javításakor úgy járunk el, hogy a szövegmező pontosan a kontrol feliratának területe fölött jelenjen meg. A megjelenéskor a Text property-jének értéke az eredeti felirat lesz, míg a mező eltüntetésekor a mezőben megadott szöveg lesz adott esetben a felirat.
A kontrol metódusai
A kontrol rendelkezik néhány belső függvénnyel, melyeket az eseménykezelőkben használunk. Lássuk ezek jellemzőit sorban.
- ImageDuringDrag: a függvény egy kissé változtat a kontrol által megjelenített képen vonszolás közben. Nem teszünk mást, mint kicsit elhalványítjuk a képet a vonszolás ideje alatt. Ekkor úgy járunk el, hogy a betöltött képet pixelenként lekérdezzük, és a pixelek színének egyik összetevőjének értékét – ahol lehet – 128-cal csökkentjük.
- SetImage: a metódusban megvizsgáljuk, hogy a betöltendő kép tulajdonságai megfelelnek-e a szükséges követelményeknek, és elhelyezzük azt a kontrolban.
- SetRegion: a metódusban felosztjuk a kontrol felületét részterületekre (régiókra), melyek majd a képet és a feliratot tartalmazzák.
- NewSize: a függvényt mindig meghívjuk, amikor csak módosítjuk a kép feliratát, vagy a megjelenített képet. A metódusban a képet a kontrol felső, a feliratot pedig a kontrol alsó szegmensébe igazítjuk.
A kontrol rendelkezik egy sor eseménykezelővel, melyek közül talán az OnPaint eseménykezelő a legfontosabb a megjelenítés szempontjából. Ebben a metódusban csak azt vizsgáljuk, hogy a kontrol engedélyezett-e vagy sem. Amennyiben az Enabled property értéke TRUE, akkor a Graphics osztály DrawImage és DrawString metódusaival, ellenkező esetben a ControlPaint.DrawImageDisabled és ControlPaint.DrawStringDisabled metódusokkal rajzoljuk ki a feliratot és a képet.
g.DrawImage(bmp,imagerect.Location);
...
g.DrawString(Text,Font,new SolidBrush(SystemColors.HighlightText),textrect,sf);
Vagy pedig:
ControlPaint.DrawImageDisabled(g,bmp,(int)imagerect.X, (int)imagerect.Y,BackColor); ControlPaint.DrawStringDisabled(g,Text,Font,SystemColors.GrayText,textrect,sf);
A vonszolás kezdetekor az OnMouseDown eseménykezelőben beállítunk egy Offset értéket, mely a kurzor pozíciójának aktuális értéke, az egyes koordinátákat negatív előjellel megadva.
offset = new Point(-e.X,-e.Y);
Az OnMouseMove metódusban ezeket használjuk fel a pozíció meghatározásához.
Point p = Parent.PointToClient(MousePosition);
p.Offset(offset.X,offset.Y);
Location = p;
Ennek eredményeképpen a kontrol megragadásakor az egér mozgását követve valósul meg a vonszolás.