Witam,
Potrzebuję metodę która będzie zwracała listę wzorców kontrolek wg których te kontrolki mają się tworzyć. Metoda ta będzie przeładowana w klasie pochodnej przez co każda klasa pochodna może definiować inną listę kontrolek.
Pisząc wzorzec mam na myśli jak to ma być kontrolka i jak ma mieć ustawione właściwości.
Poniżej rozpiszę o co mniej więcej chodzi. Teraz np mam taką metodę:
public static Control TworzKontrolke<TypKontrolki>(Action<TypKontrolki> akcja)
where TypKontrolki : Control, new()
{
TypKontrolki kontrolka = new TypKontrolki();
akcja.Invoke(kontrolka);
return kontrolka;
}
przez co można napisać w kodzie np formatki:
this.Controls.Add(Metody.TworzKontrolke<Dane, TextBox>(
a => {
a.Text = "QWE ASD ZXC";
a.Width = 100;
a.Height = 100;
a.Multiline = true;
a.Location = new Point(10, 10);
}));
Docelowo powinno być tak:
public abstract class DaneGeneratora
{
public abstract Type Typ { get; }
public abstract Action<???> Akcja { get; }
}
public class DaneGeneratora<TypKontrolki>
where TypKontrolki : Control, new()
{
public override Type Typ
{
get
{
return typeof(TypKontrolki);
}
}
private Action<TypKontrolki> _akcja;
public override Action<TypKontrolki> Akcja
{
get
{
return akcja;
}
}
public DaneGeneratora(Action<TypKontrolki> akcja)
{
_akcja = akcja;
}
}
potem mógłbym to tak zastosować:
public void TworzKontrolki(List<DaneGeneratora> dane)
{
foreach(var d in dane)
{
Control k = (Control)Activator.CreateInstance(dane.Typ);
dane.Akcja.Invoke(k);
this.Controls.Add(k);
}
}
Niestety problem polega na tym co jest w klasie bazowej DaneGeneratora. Nie wiem jak w klasie DaneGeneratora zrobić "schowek" na akcje które mają być wykonane na kontrolce. Nie mogę wstawić tam Action bo nie można rzutować Action<> na Action bo to delegaty. Próbowałem wrzucić tam typ Delegate ale potem nie wiem jak to uruchomić na kontrolce. Macie jakieś pomysły jak to zrobić?
Pozdrawiam