FIX: Cannot Disable UserControl on Modal Form
ID: Q171972
|
The information in this article applies to:
-
Microsoft Visual Basic Control Creation, Learning, Professional, and Enterprise Editions for Windows, version 5.0
SYMPTOMS
A UserControl created in Visual Basic and placed on a form that is opened
modally does not respond to attempts made to disable it. Setting the
Enabled property of the control behaves as expected on a non-modal form,
but setting Enabled = False on a modal form has no effect.
RESOLUTION
You can use the Windows API function EnableWindow to enable/disable the
ActiveX control.
- In the General Declaration section of the module, place the following
declaration: (This must be declared as Private if it is included in a
form module.)
Private Declare Function EnableWindow Lib "user32" Alias _
"EnableWindow" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
- The hWnd property, like all UserControl properties, requires a public
property method to expose the property as part of the object's
interface. Since you will not be setting a value, the Property Get
is all that is needed.
Public Property Get hWnd() as Long
hWnd=UserControl.hWnd
End Property
- Next, you need to associate this method with the hWnd property
of the control:
- From the Tools menu, select Procedure Attributes.
- Select "hWnd" from the Name drop-down list.
- Click the Advanced button.
- From the Procedure ID drop-down list, choose "hWnd." Click OK.
- The EnableWindow function can now be called to enable or disable the
UserControl. To disable the UserControl:
Dim result as Long
result = EnableWindow(Me.UserControl1.hWnd, 0)
To enable the UserControl:
Dim result as Long
result = EnableWindow(Me.UserControl1.hWnd, 1)
STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article. This bug has been fixed in Visual Basic
6.0.
MORE INFORMATIONSteps to Reproduce Behavior
- Create a new "ActiveX Control" project.
- Add the following code to the UserControl:
Public Property Get enabled() As Boolean
enabled = UserControl.enabled
End Property
Public Property Let enabled(vNewValue As Boolean)
UserControl.enabled = vNewValue
End Property
Private Sub UserControl_Click()
MsgBox "Control is not Disabled."
End Sub
- From the Tools menu, select Procedure Attributes.
- Click the Advanced button.
- From the Procedure ID drop-down, chose "Enabled." Click OK.
- Add a "Standard EXE" project.
- Close the UserControl window, and add the UserControl to Form1.
- Add two CommandButtons to Form1. Set the following properties.
Name: Command1 Caption: "Enable Control"
Name: Command2 Caption: "Disable Control"
- Add the following code to Form1.
Private Sub Command1_Click()
Me.UserControl11.Enabled = True
End Sub
Private Sub Command2_Click()
Me.UserControl11.Enabled = False
End Sub
- Add a standard module to the project.
- Add the following code to Module1:
Public Sub Main()
Form1.Show vbModal
End Sub
- Run the project.
- Note that clicking on the button labeled "Disable Control" does not
prevent the message box from appearing when the UserControl is clicked.
- Stop the project and open Module1.
- In Sub Main(), change:
Form1.Show vbModal
to:
Form1.Show
- Run the project again, and note that the "Disable Control" button now
functions as expected and the message box does not appear.
Additional query words:
kbComp kbCtrl kbVBp kbdsd kbVBp500bug kbVBp600fix kbDSupport kbCtrlCreate kbAPI
Keywords : kbGrpVB
Version :
Platform : WINDOWS
Issue type : kbbug
|