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 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:
a. From the Tools menu, select Procedure Attributes.
b. Select "hWnd" from the Name drop-down list.
c. Click the Advanced button.
d. 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. We are researching this
bug and will post new information here in the Microsoft Knowledge
Base as it becomes available.
MORE INFORMATION
Steps 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.
Keywords : vb5all VBKBAX VBKBComp VBKBCtrl
Version : 5.0
Platform : WINDOWS
Issue type : kbbug
|