Autor Wątek: Delegaty w MDI - komunikacja między obiektami  (Przeczytany 1086 razy)

Offline Ajgor

  • Użytkownik

# Styczeń 03, 2011, 16:10:08
Witam.

Tworzę projekt MDI (jeśli chodzi o ścisłość, to ma to być oparte na DockPanelSuite). Próbuję jakoś sensownie (i dzaiałająco) zrobić komunikację między panelami (każdy panel jest osobnym obiektem).
NIBY wszyscy twierdzą, że najlepiej to zrobić przy pomocy delegatów. Niestety nigdy nie miałem z nimi do czynienia. NIBY w necie i w książkach jest sporo tutoriali na ich temat. Ale wszystkie są jakieś niedorobione. Co z tego, że będę wiedział, jak zdefiniować delegata, jak go wywołać, skoro nie wiem, GDZIE to wszystko poukładać. Załóżmy, że mam okno - ojca. W nim dwa równorzędne panele dzieci dziedziczące z tego ojca. W jednym panelu (nazwijmy go "A") - TreeView z drzewem folderów, a w drugim (nazwijmy go "B") objekt ListView. Chciał bym, żeby po zaznaczeniu folderu w panelu A, w panelu B pojawiły się miniaturki grafik z tego folderu. NIBY najlepiej zrobić to delegatami. Ale... GDZIE zdefiniować delegata? A ojcu, w panelu A, czy w B? Gdzie go wywołać? Macie jakieś tutoriale opisujące zagadnienie od tej strony? A może ktoś z szanownych forumowiczów by to jakoś przystępnie wyłożył?

--
Pozdrawiam.
Ajgor

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kuba D.

  • Użytkownik

# Styczeń 03, 2011, 16:28:36
A po co delegaty do takich rzeczy ?
Pobierasz z panelu A wskaznik na jego ojca, z ojca pobierasz wskaznik na dziecko - panel B, w panelu B masz metode ktora wyrysowuje zawartosc dowolnego folderu pokaz_miniaturki(folder jakis), majac pointer na ten panel B w panelu A wywolujesz metode pokaz_miniaturki(nasz_folder) z panelu B i masz miniaturki. Nic prostszego ;)

Offline Ajgor

  • Użytkownik

# Styczeń 03, 2011, 16:35:28
Hehehe... Tak właśnie próbowałem robić. I nawet działało (z czymś tam miałem jakiś drobny problem, ale nic strasznego), ale wydawało mi się, że to "mało eleganckie". I faktycznie wyczytałem ( nie pamiętam, gdzie), ze w takiej sytuacji delegaty "to jest to" :)
« Ostatnia zmiana: Styczeń 03, 2011, 16:51:15 wysłana przez Ajgor »

Offline Kuba D.

  • Użytkownik

# Styczeń 03, 2011, 17:45:51
Delegaty są przydatne jeśli np. robisz gui, masz klasę bazową wszystkich komponentów i próbujesz elegancko zaimplementować np. obsługę kliknięcia konkretnego przycisku bez mieszania w jego klasie Button, tworzenia stu klas dziedziczących itd( gdzie masz metodę onButtonClick(bla bla); a w konkretnym już obiekcie "podstawiasz" za tę metodę swoją własną, dotyczącą działania jednego, ścisłe określonego przycisku) a wywoływana jest ona przez onButtonClick(bla bla). I masz unikatowe działanie onButtonClick(bla bla) dla każdej kontrolki button utworzonej z jednej klasy wspólnej Button.