Kopiowanie event handlera

0

Cześć.
Szukam rozwiązania małego problemu.

MAm obiekt x (button) z ustawionym OnClick event handlerem.

Dynamicznie tworzę obiekt y (button) i potrzebuje przepisać parę własności z obiektu X, konkretnie ten event handler.
Jak to zrobić?

0

Ustaw metodę z buttona 1, jako statyczną.

0

tylko jeśli metody te znajdują się wewnątrz klas nie statycznych to powoduje to błedy kompilacji...

0

Nie da się w prosty sposób przepisać wszystkich event-handler'ów z jednego eventa do drugiego. Najprościej będzie jak po prostu przy tworzeniu buttonów y dopiszesz im odpowiedni handler, którego użyłeś przy button x.

Możesz ewentualnie zrobić taki trick:

Button btnx, btny;
//...
btny.OnClick += (Object, EventArgs) => btnx.PerformClick();
0

Wow, ciekawa konstrukcja. Szczerze mówiąc nigdy się jeszcze z taką nie spotkałem. Jestem ciekaw co robi znaczek =>?

btny.OnClick += (Object, EventArgs) => btnx.PerformClick();
0

Warto zauważyć, że do tego potrzeba VS 2008.

0

do lambd - tak, do handlerow/delegatow/innego zapisu tego tricku - nie :)

Rafal1111 napisał(a)

potrzebuje przepisać ten event handler Jak to zrobić?

adf88 napisał(a)

Nie da się w prosty sposób przepisać wszystkich event-handler'ów z jednego eventa do drugiego.

dopowiadajac: ...poniewaz w zaleznosci od tego, jaka konkretnie klasa ten event definiuje, jego (ukryta) implementacja moze sie bardzo roznic.. moze to byc lista, moze byc to 'złancuchowany' delegat, albo jeszcez pare innych rzeczy.. wszsytko prowadzi do tego, ze co prawda event zawsze ma metode add (+=), zawsze remove(-=), ale zaden z nich nie dostarcza sensownego sposobu odpytania go 'co on wlasciwie zawiera teraz'

w hardcoreowej praktyce - jest to jednak wykonalne, trzeba tylko wiedziec jaki to typ eventu. czasem nawet zdarza sie ze da sie znalezc w api czegos-tam ukryta metode do kopiowania :)ale mimo wszystko, tak jak adf powiedzial, latwiej i szybciej jest po prostu zapamietac sobie jakkolwiek na boku liste tego co podpinasz i potem jej uzywac.. albo 'wsteczne' odpalenie tak jak w tym przypadku, z tym ze nie zawsze mozna je zastosowac

0
quetzalcoatl napisał(a)

do lambd - tak, do handlerow/delegatow/innego zapisu tego tricku - nie :)

Procedurka ma być tak skonstruowana, że podajemy w parametrze binding navigator oraz datagridview. Następnie "kopiowane" są wszystkie (prawie) przyciski z binding nawigatora i wstawiane jako context menu do datagridview.
No i wszystko hula jak ta lala, ale nie mogę nigdzie namierzyć jak przepisać eventy... Zasadniczo tutaj powinien być przepisany adres, do którego prg ma skoczyć po zdarzeniu. Bo wykonywać się będzie ten sam kod.

A co do list, to nie da rady, gdyż to ma być mocno uniwersalne i nie wiem co będzie podane jako parametr.

0

No to zrób tak jak pisałem - każdemu itemowi z menu kontekstowego przyporządkuj odpowiadający mu przycisk z navigator'a a w obsłudze kliknięcia itemu wywołaj PerformClick na przyporządkowanym przycisku. Najprościej przy pomocy lambda tak jak pokazałem.

No chyba że navigator ma być po tej operacji niszczony i ma zostać samo menu, ale to by bez sensu było tworzyć navigator tylko po to aby przepisać eventy.

Zresztą wiadomo przecież co w tych eventach siedzi, konkretne metody BindigSource, jest ich zaledwie kilka i spokojnie można je własnoręcznie podpiąć pod menu kontekstowe. Nie lepiej zamiast wybierać przyciski z navigatora wybrać metody z BindingSource ?

0
adf88 napisał(a)

No to zrób tak jak pisałem - każdemu itemowi z menu kontekstowego przyporządkuj odpowiadający mu przycisk z navigator'a a w obsłudze kliknięcia itemu wywołaj PerformClick na przyporządkowanym przycisku. Najprościej przy pomocy lambda tak jak pokazałem.

zaraz sprawdze, ale PerformClick to chyba w 2008, a ja korzystam z 2005.

adf88 napisał(a)

Zresztą wiadomo przecież co w tych eventach siedzi, konkretne metody BindigSource, jest ich zaledwie kilka i spokojnie można je własnoręcznie podpiąć pod menu kontekstowe. Nie lepiej zamiast wybierać przyciski z navigatora wybrać metody z BindingSource ?

no właśnie nie wiadomo, aplikacja jest złożona, jest duzo binding nav., fakt że część przycisków się powtarza, ale poza tym to dla każdego b.nav. pisane są nowe proc. obsługi...

0
Rafal1111 napisał(a)

zaraz sprawdze, ale PerformClick to chyba w 2008, a ja korzystam z 2005.

A teraz mamy 2009 a Titanic zatonął w 1912. Tylko co z tego?
Liczy się wersja .NET framework a nie VS. To nie jest przecież to samo :|
A PerformClick jest zdaje się od wersji 1.0 ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1