All -
I am in the process of developing a custom control that mimics the Office
2003 "Inbox" as closely as possible. After a great deal of frustrating work
trying to do a heavily custom-drawn ListView (which is how I believe MS is
doing it) and getting nowhere, I said "screw it" and built the thing from
scratch. I have a UserControl with a few contained controls, a header
control I'm drawing entirely by hand, and a Panel in which I'm doing all my
item drawing (also entirely by hand.) The hierarchy looks like this:
UserControl
- Label (actually a 3rd party label control so I can get the gradient)
- Panel
--- Custom header control (docked to the top of the parent panel)
--- Vertical scrollbar (docked to the right of the parent panel)
--- "client area" panel (docked as "Fill" of the parent panel)
I have coded up "Enter" and "Leave" events for the "client area" panel, so
that I can get the appropriate colors for selected items, and the focus
rectangle when necessary. However, once I put my control on a form, these
events aren't firing when the containing form loses focus. I have a
TreeView control on the form - purely to test my focus-related code - and
the TreeView does fire a LostFocus event when the form loses focus. The
actual UserControl fires a LostFocus event when I click into my panel (which
kinda makes sense, but not really), but not when the form is deactivated.
Hooking a LostFocus to my panel does nothing at all.
I've tried to switch from a UserControl base to a ContainerControl base,
thinking that the UserControl was somehow "taking over" the focus events
from its contained controls. But that didn't solve anything. Trying the
"ChangeUICues" event didn't get me anywhere either.
I can't believe that the solution is to pass a reference to the containing
form into the control and catch the "Deactivate" event, but that's what I'm
left with. I am obviously missing something fundamental about all this.
Can someone please point me in the right direction?
TIA
- Scott