Kontrolka- mouseenter/leave/click we wszystkich child-kontrolkach

0

Cześć

Co zrobić, żeby po najechaniu na mojej kontrolce na inną kontrolkę w jej 'środku' kursorem nie wywoływał się event mouseleave?
Teraz po najechaniu np na label już się wywołuje leave- co jest poprawne, jednak chciałbym, żeby dopiero po zjechaniu z mojej kontrolki wywoływało się leave.

Co chce osiągnąć?
Po wrzuceniu tej kontrolki po najechaniu ma zmienić tło, po zjechaniu powrót do tego co był.

0

Nie kombinuj jak tu zmienić eventy, tylko wykombinuj jak zrobić to co chcesz (nie do końca rozumiem co ma znaczyć „po wrzuceniu tej kontrolki”) przy istniejącym zachowaniu eventów.

0

Zrobiłem UserControl i tam jest wszystko co potrzebowałem.
W UserControl jest event, jeśli najedzie myszką zmienia się tło
UserControl dodaję do okna w programie.
Jeśli najadę na UserControl tło się zmienia, ale jeśli najadę kursorem na UserControl->Label tło wraca (MouseLeave na UserControl)

Chciałbym, żeby MouseLeave odpaliło się po wyjechaniu z UserControl a nie po najechaniu na 'kontrolki-dzieci' UserControl'a.

0

Rozwiązanie:

		InitializeComponent();

        foreach (Control child in Controls)
        {
            child.MouseEnter += (s, e) => Item_MouseEnter(s, e);
            child.MouseLeave += (s, e) => OnMouseLeave(e);
        }
		
		protected override void OnMouseLeave(EventArgs e)
        {
            if (this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition)))
                return; //suppress mouse leave event handling

            if (m_bIsHover)
            {
                m_bIsHover = false;

				//
				
                Invalidate(); //actually my mouse Enter/Leave event
            }

            base.OnMouseLeave(e);
        }

        void Item_MouseEnter(object sender, EventArgs e)
        {
            m_bIsHover = true;
            
			//
			
            Invalidate(); //actually my mouse Enter/Leave event
        }

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