Very Interesting Idea.
What I came up with was this.
I have my CLASS module cDropDown and made a CODE module cDropDownCommon when I click on the cDropDown button it calls a routine in cDropDownCommon passing Me (itself) which is save in the cDropDownCommon Globals. When / If another cDropDown button is clicked it calls the cDropDownCommon which compares what it has to what is being passed if different it uses it copy to call a routine.
see code below.
Sub Process_Globals
Public mLastDropDown As Object = Null
End Sub
Public Sub ShowDropDown(Showing As Object)
Dim CurrentDropDown As cDropDown = mLastDropDown
Dim ShowingDropDown As cDropDown = Showing
If CurrentDropDown <> Null AND CurrentDropDown.IsInitialized AND CurrentDropDown <> ShowingDropDown Then CurrentDropDown.CloseDropDown
mLastDropDown = Showing
End Sub
Public Sub CloseDropDown(Closing As Object)
Dim CurrentDropDown As cDropDown = mLastDropDown
Dim ClosingDropDown As cDropDown = Closing
If CurrentDropDown <> Null AND CurrentDropDown.IsInitialized AND CurrentDropDown = ClosingDropDown Then CurrentDropDown = Null
End Sub
NOW I am not sure what I am doing is legal or right but it is working. Would be nice if a CLASS module has some common storage.
BUT as I am writing this I realize your Idea is probably better. Because I have other fields (togglebutton, checkbox, etc) that a user can click on while the dropdown is showing and if does not close at that point.
So I will convert to your idea tomorrow. Time for some sleep
Thanks for the help
BobVal