17. februar 2006 - 14:20Der er
2 kommentarer og 1 løsning
Hvordan kan jeg vide om der klikkes på en Child Control?
Hej.
Jeg har en klasse som nedarver fra Panel. I denne klasse har jeg brug for at vide om musen klikker på en child control. Jeg ved at man kan tilføje EventHandlers til alle Child Controls og deres Child Controls og deres Child Controls osv, men dette vil jeg gerne ungå. Jeg har løst problemet ved at lave et MessageFilter, men denne løsning synes jeg egentlig ikke så godt om heller, da den giver relativ dårlig performance.
Er der nogen som kender en smart og effektiv måde at gøre dette på?
Jeg forstår ikke helt hvorfor du ikke vil bruge eventhandlers til håndtering. Måske kan du uddybe dit program lidt mere evt. med kode. Anyway du kan vel finde ud af om der er en control ud fra musekoordinater.
Jeg har en Custom control som dynamisk får tilføjet kontroller. Disse kontroller kan i sig selv indeholde child controls, disse child controls kan indeholde flere child controls osv. Problemet med events er, at hver gang der bliver tilføjet en control til min klasse, må jeg gå igennem alle child controls, og deres child controls osv, for at tilføje eventhandlers på deres click event. Hvis der bliver fjernet nogle controls, må jeg gå igennem dem igen, for at fjerne eventhandlers. Dette synes jeg er en meget klodset løsning.
Som klassen virker nu, bruger den et messagefilter. Hver gang den venstre musseknap trykkes, kalles Control.Contains på min control, som tjekker om min Custom control er parent eller grandparent osv, til den control musen trykkede på. Dette er muligvis den bedste måde at gøre det på, jeg håbede bare der var en bedre løsning.
På en form er der en property der hedder KeyPreview. Hvis denne sættes til "true", bliver alle key events fra formens child controls vidersendt til formen. Jeg havde håbet at der var noget tilsvarende for museklik.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.