ComboBox drop-down window closing/hidden

H

- HAL9000

I am trying to get an event when the drop-down Combo Box goes away /
reverts back to showing a single item.

For example, clicking the box's down arrow, to remove the drop-down
window, doesn't seem to generate any event. Not even a mouse event.
That seems a little odd.

Besides not finding a public event method, I can't seem to find a
protected method to over-ride either.

I am guessing I need to look for a message in ComboBox's WndProc().
But I don't know which message is the one I'm looking for.

Any ideas ?

Thanks...
 
K

kimiraikkonen

I am trying to get an event when the drop-down Combo Box goes away /
reverts back to showing a single item.

For example, clicking the box's down arrow, to remove the drop-down
window, doesn't seem to generate any event. Not even a mouse event.
That seems a little odd.

Besides not finding a public event method, I can't seem to find a
protected method to over-ride either.

I am guessing I need to look for a message in ComboBox's WndProc().
But I don't know which message is the one I'm looking for.

Any ideas ?

Thanks...

DropDownClosed event of combobox must be what you're looking for.
 
H

- HAL9000

DropDownClosed event of combobox must be what you're looking for.

Ahh, I see they added DropDownClosed() event for .net version 2. I
have to use version 1, so I can't use that.

That tip did lead me to the information I needed though (eg
CBN_CLOSEUP message):

http://groups.google.com/group/microsoft.public.dotnet.languages.vb/msg/b174deef8895fc73


Changed that around a little to:

Protected Overrides Sub WndProc(ByRef m As
System.Windows.Forms.Message)
'WM_USER As Integer = &H400
'OCM__BASE As Integer = WM_USER + &H1C00
'WM_COMMAND As Integer = &H111
'OCM_COMMAND As Integer = OCM__BASE + WM_COMMAND
If m.Msg = (&H400 + &H111 + &H1C00) Then
Debug.WriteLine("WndProc Msg = " & Hex(m.Msg) & "h, LParam =
" & Hex(m.LParam.ToInt32) & "h, WParam = " & Hex(m.WParam.ToInt32) &
"h, HWnd = " & Hex(m.HWnd.ToInt32) & "h")
If (m.WParam.ToInt32 And &HF0000) = &H80000 Then
Debug.WriteLine("drop down window close message")
OnDropDownWindowClose(System.EventArgs.Empty)
End If
End If
MyBase.WndProc(m)
End Sub

Protected Overridable Sub OnDropDownWindowClose(ByVal e As
System.EventArgs)
RaiseEvent DropDownWindowClose(Me, e)
End Sub

Public Event DropDownWindowClose As EventHandler
 
K

kimiraikkonen

Ahh, I see they added DropDownClosed() event for .net version 2.  I
have to use version 1, so I can't use that.

That tip did lead me to the information I needed though (eg
CBN_CLOSEUP message):

http://groups.google.com/group/microsoft.public.dotnet.languages.vb/m...

Changed that around a little to:

   Protected Overrides Sub WndProc(ByRef m As
System.Windows.Forms.Message)
      'WM_USER As Integer = &H400
      'OCM__BASE As Integer = WM_USER + &H1C00
      'WM_COMMAND As Integer = &H111
      'OCM_COMMAND As Integer = OCM__BASE + WM_COMMAND
      If m.Msg = (&H400 + &H111 + &H1C00) Then
         Debug.WriteLine("WndProc Msg = " & Hex(m.Msg) & "h, LParam =
" & Hex(m.LParam.ToInt32) & "h, WParam = " & Hex(m.WParam.ToInt32) &
"h, HWnd = " & Hex(m.HWnd.ToInt32) & "h")
         If (m.WParam.ToInt32 And &HF0000) = &H80000 Then
            Debug.WriteLine("drop down window close message")
            OnDropDownWindowClose(System.EventArgs.Empty)
         End If
      End If
      MyBase.WndProc(m)
   End Sub

   Protected Overridable Sub OnDropDownWindowClose(ByVal e As
System.EventArgs)
      RaiseEvent DropDownWindowClose(Me, e)
   End Sub

   Public Event DropDownWindowClose As EventHandler- Hide quoted text -

- Show quoted text -

I think it's your time to jump .net 2.0 at least. DropDownClosed is
well-wrapped event rather than writing low-level Win32 API calls as
you described above.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top