Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: AxioUK en Agosto 04, 2014, 12:47:33 pm
-
Estimados
Nuevamente apelo a la sabiduría de los expertos en Controles de usuario, para que me saquen de mi oscuridad, me surgió la necesidad gráfica de usar un Checkbox que actúe como OptionButton (solo uno activo por grupo), para evitar crear uno de cero, busque un usercontrol checkbox y traté de aplicar las modificaciones que necesito, el tema es que una sola cosa me está fallando: que funcione como OptionButton, osea que al marcar uno se desactive el resto del grupo en ese contenedor, por lo que buscando orientación en un usercontrol OptionButton encontré un código que me funciona cuando modifico el original, pero al implementarlo en este no funciona como requiero.
Private Sub ContainerCheck()
Dim aControl As Object
For Each aControl In UserControl.Parent.Controls
If TypeOf aControl Is AxCheckBox Then
If aControl.ButtonType = OptionButton Then
'If aControl.Container.hWnd = UserControl.ContainerHwnd Then
' If aControl.hdc <> UserControl.hdc Then
If aControl.Value = True Then aControl.Value = False
' End If
'End If
End If
End If
Next
End Sub
Este es el enlace a los fuentes: http://www.4shared.com/rar/QaiIO8mace/ax_Checkbox.html (http://www.4shared.com/rar/QaiIO8mace/ax_Checkbox.html)
favor su ayuda para que funcione como OptionButton al indicar ButtonType=OptionButton
Agradecido
-
Hola, guiandome de un control que estaba en Recursosvisualbasic,
Private Sub ContainerCheck()
Dim frm As Form
Set frm = Extender.Parent
Dim lHwnd As Long
lHwnd = Extender.Container.hWnd
Dim ctrl As Control
For Each ctrl In frm.Controls
With ctrl
If TypeOf ctrl Is AxCheckBox Then
If .ButtonType = OptionButton Then
If (.Container.hWnd = lHwnd) And _
(ctrl.hWnd <> UserControl.hWnd) Then
If .Value Then .Value = False
End If
End If
End If
End With
Next
End Sub
pero tenes algunas cosas un poco, un poco confusas, al menos para que me fucione también cambie esto, igual tenes que ir viendo bien todo yo solo mire por arriba eso.
Public Property Let Value(ByVal nValue As Boolean)
If (m_ButtonType = OptionButton) And (nValue = True) Then ContainerCheck
m_Value = nValue
PropertyChanged "Value"
Call RenderCheckBox
End Property
Private Sub UserControl_Click()
If MouseState.Button = vbLeftButton Then
If m_Value = True Then
If m_ButtonType <> OptionButton Then
m_Value = False
RaiseEvent Click
Else
Exit Sub
End If
Else
m_Value = True
RaiseEvent Click
End If
If m_ButtonType = OptionButton Then Call ContainerCheck
Call RenderCheckBox
End If
End Sub
en remplazo del Label podes usar el API DrawText.
Saludos.
-
Y no podes usar un OptionButton standart de VB con su propiedad Style en modo grafico?
-
Muchisimas gracias estimado LeandroA
daré algunos retoques, revisaré lo del API Drawtext y lo publicaré aquí...