Eventy - Clickthrough

0

Witam

Mam pewien problem z eventami :-( . Mianowicie, na formie umieszczam np. panel i na nim button. Dla panela ustawiam wydarzenia mouseEnter i mouseLeave, przypisuję wtedy odpowiednią wartość zmiennej logicznej isMouseOver. Problem polega na tym, że gdy najadę myszką na button zostaje wywoływane mouseLeave, a przecież mysz jest tak jakby dalej nad panelem... :/ Kiedyś po prostu przypisywałem każdej kontrolce zdarzenia mouseLeave i mouseEnter, ale po pierwsze nie jest to ładne rozwiązanie [glowa] i jak zakładam jest inne oraz po drugie problem jest, gdy kontrolki do panela dodawane są dynamicznie, w tym kilka zagnieżdżonych. Więc proszę was o jakąś podpowiedź, jak sobie z tym poradzić?

Z góry dzięki, Wronq!

0

obsługi zdarzeń można tak samo dynamicznie dodawać. Nie tylko z designera

0

No tak... Ale co to ma do mojego pytania?
Mogę zrobić coś takiego

foreach(Control c in this.Controls)
{
     foreach(Control c1 in c.Controls)
     {
     ...///itd
     cx.MouseOver += ...
     }
}

Może też przez LINQ by się dało, lecz zbyt dobrze go nie znam. Ale sądzę, że jest na to lepsze rozwiązanie, niż zagnieżdżone pętle, więc pytam.

0
Wronq napisał(a)

No tak... Ale co to ma do mojego pytania?

hm...

Wronq napisał(a)

raz po drugie problem jest, gdy kontrolki do panela dodawane są dynamicznie, w tym kilka zagnieżdżonych. Więc proszę was o jakąś podpowiedź, jak sobie z tym poradzić?

Lepiej powiedz jaką funkcjonalność chcesz osiągnąć, być może za daleko wykombinowałeś

0

Chyba znalazłem rozwiązanie. Może troszkę przekombinowane i nie wiem jeszcze jak zachowa się w przypadku UserControl, ale może będzie dobrze...

W zdarzeniu mouseLeave

if (!new Rectangle(panel.Location, panel.Size).Contains(panel.PointToClient(Cursor.Position)))
     {
          isMouseOver = false;
     }

Lecz i tak chętnie dowiem się jak przekazywać eventy do kontrolki-rodzica.

Pozdrawiam, Wronq

Edit: A jednak :( To nie jest dobre rozwiązanie, ponieważ nie zarejestruję mouseEnter jednego panela, gdy na nim będzie jakiś inny w pozycji x=0, albo y=0 i wjadę myszką bezpośrednio na ten drugi. Poza tym, gdy panele są zagnieżdżone, to nie jestem w stanie określić pozycji UC, która znajduje się na którymś z nich, przynajmniej tak mi się wydaje.
Nadal najprostszym rozwiązaniem wydaje mi się przekazywanie eventu dalej, do kontrolki-rodzica, ale nie wiem czy i jak to jest możliwe.
Edit2: Już sobie poradziłem, pomogło mi to http://www.codeproject.com/KB/cs/event_broadcast.aspx

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