A elkészített kontrol a UserControl osztályból származik, mely rendelkezik egy ComboBox típusú gyermekobjektummal. Ennek eredményeképpen a tagobjektumnak csak bizonyos tulajdonságait tesszük publikussá, a többit elrejthetjük.
A kontrol Countries property-je tartalmazza az országok listáját. Mivel típusa megegyezik a ComboBox kontrol Items kollekciójának típusával, azonos módon kérdezhetjük le az elemeket.
[Browsable(false)]
public ComboBox.ObjectCollection Countries
{
get
{
return comboBox1.Items;
}
}
A kiválasztott elem indexét a SelectedIndex tulajdonság hordozza.
[Browsable(false)]
public int SelectedIndex
{
get
{
return comboBox1.SelectedIndex;
}
set
{
comboBox1.SelectedIndex = value;
}
}
A Text property-vel pedig lekérdezhető a kontrolban aktuálisan megjelenő ország név.
[Browsable(false)]
public override string Text
{
get
{
return comboBox1.Text;
}
}
Amikor a kontrolt regisztráltuk a ToolBox palettán és ezt követően egy alkalmazás Form-jára dobjuk, akkor lefut a kontrol konstruktora, melyben pedig a GetCountries metódus, összegyűjtve az országok neveit a Rendszerleíró adatbázisból.
A Registry „HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Telephony\Country List” kulcsában találjuk meg az országok adatait tartalmazó alkulcsokat. Minden ilyen kulcson belül van egy Name nevű érték, amely az ország nevét tartalmazza.
A metódusban először megnyitjuk a HKEY_LOCAL_MACHINE főkulcsot.
private void GetCountries()
{
RegistryKey key = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "");
Megnyitjuk a „Country List” alkulcsot, majd létrehozunk egy további kulcsot az albejegyzések feldolgozásához.
RegistryKey subkey = key.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Country List");
RegistryKey countrykey;
Lekérdezzük az országok adatait tartalmazó alkulcsok neveit egy karakterlánc-tömbbe.
string[] countrykeynames = subkey.GetSubKeyNames();
Majd ezeket a neveket felhasználva sorban megnyitjuk a kulcsokat, és kiolvassuk a „Name” kulcs alatti értéket, mely egy ország név lesz.
for(int i=0;i<subkey.SubKeyCount;i++)
{
countrykey = subkey.OpenSubKey(countrykeynames[i]);
A neveket eltároljuk a ComboBox tagkontrolban.
comboBox1.Items.Add(countrykey.GetValue("Name"));
}
subkey.Close();
}
A kiválasztott elem megváltozásának eseményéhez létrehoztunk egy kezelőt a ComboBox kontrol számára, melyben elsütjük a szülő kontrol deklarált eseményét. Az esemény deklarációja a következő:
public delegate void SIHandler(object sender, EventArgs e);
public event SIHandler SelectedItemChanged;
A tagobjektum kezelője - melyben az eseményt példányosítjuk - a következőképpen fest:
private void comboBox1_SIChange(object sender,EventArgs e)
{
SelectedItemChanged(this,e);
}
A hívó alkalmazásban a Form-ra dobott kontrol SelectedItemChanged eseményéhez deklaráltunk egy kezelőt.
this.ceControl1.SelectedItemChanged += new CELibrary.CEControl.SIHandler(ceControl1_SIChanged);
A kezelőfüggvény definíciójában pedig egyszerűen csak kiolvassuk a Text property értékét.
private void ceControl1_SIChanged(object sender,EventArgs e)
{
textBox1.Text = ceControl1.Text;
}
A kontrol alapértelmezésben Magyarország nevét jeleníti meg a ComboBox-ban.