Microsoft KB Archive/171972

= FIX: Cannot Disable UserControl on Modal Form =

Article ID: 171972

Article Last Modified on 12/10/2003

-

APPLIES TO


 * Microsoft Visual Basic 5.0 Control Creation Edition
 * Microsoft Visual Basic 5.0 Learning Edition
 * Microsoft Visual Basic 5.0 Professional Edition
 * Microsoft Visual Basic 5.0 Enterprise Edition

-



This article was previously published under Q171972



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.</li></ol> </li>  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) </li></ol>

<div class="status_section">

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.

<div class="moreinformation_section">

Steps to Reproduce Behavior
<ol> Create a new "ActiveX Control" project.</li>  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 </li> From the Tools menu, select Procedure Attributes.</li> Click the Advanced button.</li> From the Procedure ID drop-down, chose "Enabled." Click OK.</li> Add a "Standard EXE" project.</li> Close the UserControl window, and add the UserControl to Form1.</li>  Add two CommandButtons to Form1. Set the following properties. <pre class="fixed_text">     Name: Command1    Caption: "Enable Control" Name: Command2   Caption: "Disable Control" </li>  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 </li> Add a standard module to the project.</li>  Add the following code to Module1: Public Sub Main Form1.Show vbModal End Sub </li> Run the project.</li> Note that clicking on the button labeled "Disable Control" does not prevent the message box from appearing when the UserControl is clicked.</li> Stop the project and open Module1.</li> <li> In Sub Main, change: Form1.Show vbModal to: Form1.Show </li> <li>Run the project again, and note that the "Disable Control" button now functions as expected and the message box does not appear.</li></ol>

Additional query words: kbComp kbCtrl kbVBp kbdsd kbVBp500bug kbVBp600fix kbDSupport kbCtrlCreate kbAPI

Keywords: kbbug kbfix KB171972

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.