HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

ComboBox kontrol TreeView elemválasztóval


Példaprogram letöltése

14426 bájt

Cikkünkben több Windows-os kontrol ötvözetére mutatunk példát, melynek lehetősége adott, és a legmesszebbmenőkig támogatott. Előfordul ugyanis, hogy a meglévő kontrolok valamilyen okból nem felelnek meg a célnak, így tovább kell őket fejlesztenünk. Elkészítünk egy olyan ComboBox-szerű kontrolt, melyben a legördülő lista egy fastruktúra (TreeView), így lépve túl az egydimenziós megjelenítésen.

A kontrolunk a UserControl osztályból származik, azonban háromféle kontrolt tartalmaz, melyek megvalósítják a bevezetőben említett funkcionalitást.
A ComboBox-os megjelenést egy TextBox és egy, a Button osztályból származó kontrol segítségével valósítjuk meg. A nyomógomb ComboButton típusú, melyet Internal típusú osztályként deklaráltunk, elkerülendő, hogy a ToolBox palettán ez az osztály is megjelenjen (mivel ez is a kontrol névterében található, azonos assembly-ben).
A nyomógomb osztálya azért saját készítésű, hogy felüldefiniálva annak OnPaint metódusát, egyedi megjelenítést biztosíthassunk neki. Az osztály egy ButtonState típusú taggal rendelkezik, mely a nyomógomb állapotát tartalmazza.
private ButtonState state;
Az OnPaint metódusban az egyedi rajzoláshoz a Form ControlPaint osztály DrawComboButton metódusát használjuk fel, mely egy lefelé fordított nyilat rajzol a gomb felületére.
protected override void OnPaint(PaintEventArgs e) 
{
  base.OnPaint(e);
        System.Windows.Forms.ControlPaint.DrawComboButton(e.Graphics,0,0,Width,Height,state);
}
A kontrolunk tehát tartalmaz egy ComboButton, egy TextBox és egy TreeView típusú kontrolt, melyek együtt azt a hatást keltik majd, mintha a legördülő lista fa szerkezetű lenne.
A kontrol fontos property-je a ShowedText, melyből mindig lekérdezhető a kiválasztott elem felirata, mely megjelenik a szövegmezőben.
[Browsable(false)]
public string ShowedText
{
  get
  {
    return text;
  }
  set
  {
    text = value;
    textBox1.Text = value;
  }
}
Rendelkezik továbbá egy ImageList típusú property-vel is, hogy megadhassunk egy képlistát a kontrolnak. A képek a fastruktúra elemei mellett jelennek meg.
Egy elem kiválasztásának pillanatához is létrehoztunk egy eseményt, melyre a hívó alkalmazásban kezelőmetódus definiálható.
public event EventHandler SelectedItemChanged;
Az esemény akkor következik be, amikor a fa egy új csomópont kiválasztásával záródik be.
A kontrol konstruktorában kiszámoljuk a TreeView tagobjektum megjelenítési pozícióit, majd megadunk egy kezelőfüggvényt a nyomógombra történő kattintás eseményéhez, a fa egy elemének választása utáni esemény kezeléséhez és a csomópontra történő dupla kattintás eseményének kezelésére.
A csomópont kiválasztása után a SetText metódusban elvégezzük a kiválasztott csomópont feliratának elhelyezését a szövegmezőben. Amennyiben a csomópontra duplán kattintunk, a csomópont felirat a mezőbe íródik, és a TreeView fa bezáródik.
Amikor a kontrol nyomógombjára kattintunk, akkor megvizsgáljuk, hogy látható-e a fa vagy sem. Amennyiben még nem látható, akkor a SetTVPosition metódussal pozícionáljuk a megjelenést, és gondoskodunk arról, hogy a fastruktúra ne nyúljon túl a hívó alkalmazás űrlapjának méretein.
if (!treeView1.Visible) 
{
  SetTVPosition();
  ...
  Parent.Controls.Add(treeView1);
  ...
  treeView1.Visible = true;
  ...
A kontrol magassága 100 pixel lesz, viszont ha ezzel a mérettel kilógna az űrlapról, akkor csökkentjük ezt az értéket.
A hívó alkalmazásban egy feltöltött ImageList objektumot adunk át a kontrolnak, valamint beállítjuk a méreteit.
tvComboControl1.ImageList = imageList1;
tvComboControl1.Size = new Size(200,100);
Ugyancsak a program indulásakor felfűzünk egy gyökércsomópontot 5 gyermekcsomóponttal a faszerkezetbe.
tvComboControl1.Nodes.Add("Gyümölcsök");
tvComboControl1.Nodes[0].ImageIndex = 0;
AddNode(tvComboControl1.Nodes[0],"Alma",0);
...
Valamint létrehozunk egy kezelőmetódust a kiválasztás eseményéhez.
tvComboControl1.SelectedItemChanged += new EventHandler(tvComboControl1_SIC);
A kezelőfüggvényben a Form egy feliratán jelenítjük meg a kontrol ShowedText property-jének értékét, vagyis a kiválasztott elem feliratát.

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