Już sobie poradziłem. Stworzyłem osobną funkcję na Listboxa i osobną na Comboboxa. Wielkie dzięki wszystkim za pomoc.
Jeśli to była ironia to szkoda. Jeśli to nie była ironia to też źle ;). Widać że dobrze kombinujesz (chcesz uniknąć duplikowania kodu), ale za łatwo się poddajesz.
Azariena posłuchałeś, @Ktos-ia już nie, a szkoda.
W języku C# wszystkie typy pochodzą od System.Object, ale akurat wszystkie kontrolki od System.Windows.Forms.Control.
To podstawy obiektowości, będziesz miał ciężkie życie jeśli tego nie zrozumiesz (tzn. mówię o polimorfiźnie, a nie o tym co dziedziczy z Control).
Przykład:
class Bazowa
{
public string Pole { get; set; }
}
class Pochodna : Bazowa
{
public string InnePole { get; set; }
}
class Całka : Bazowa
{
public string JeszczeInnePole { get; set; }
}
Masz trzy (bezsensowne) klasy, z czego dwie dziedziczą z klasy bazowej.
Załóżmy że chcesz napisać funkcję zmieniającą Pole w Pochodnej
i Całce
(nazwa nie ma żadnego znaczenia, oczywiście). Twoje rozwiązanie wygląda tak:
public void Zrób(Pochodna p)
{
p.Pole = "coś";
}
public void Zrób(Całka p)
{
p.Pole = "coś";
}
Ale to bez sensu, bo dużo lepiej zrobić tak:
public void Zrób(Bazowa b)
{
b.Pole = "coś";
}
Zadziała to dla dowolnej klasy dziedziczącej z Bazowej:
void Test()
{
Pochodna p = new Pochodna();
Całka c = new Całka();
Zrób(p);
Zrób(c);
}
Jeśli to dla Ciebie proste/oczywiste: podstaw pod 'Bazowa' klasę 'Control'
, pod 'Pochodna'
, 'ListBox'
, pod 'Całka'
, 'Combobox'
i gotowe.