¿¿objeto autoParent??

27/11/2006 - 23:27 por Ivan | Informe spam
hola a todos

estoy haciendo pruebas con una funcion para determinar el numero de
controles.Hijo de un control pasado como argumento, y aunque con los
contenedores 'reales' parece hacer bien su trabajo, cuando se trata de
uno que no lo es (label, textbox, etc), siempre me devuelve 1 en vez de
0, y esto aunque le reste 1 (o 10, o 27, o...) dentro de la funcion.

Supongo que en algo esto metiendo la pata, seguramente un error de
logica, pero no lo veo. Y aunque he ido complicando la funcion con
condicionales, para ver si encontraba el motivo, en un principio era
muy sencilla y pasaba lo mismo.

expongo la funcion, que se ha enrevesado un poco. Como comentarios
algunos de mis intentos

NOTA: la funcion utilizada para determinar si es un formulario no se si
es necesaria aqui, pero en cualquier caso creo que no afecta al
resultado (aunque la he cambiado el nombre para no duplicar, y no
trabajar sobre la original, me la facilito Vinchenzo Vinc)

'*********'nroObjsHijo'****<26-11-06>************************
'devuelve el Nº de controles (o paginas) hijo de un control/objeto
'
Function nroObjsHijo2a(ByVal objCt As Object) As Long
Dim ctI As Control
nroObjsHijo = 0
If TypeName(objCt) <> "MultiPage" Then
If EsFormulario(objCt.Name) Or TypeName(objCt) = "Frame" _
Or TypeName(objCt) = "Page" Then
objCt.Controls.Count
' objCt.Controls.Count - 1 ' o menos 2, o menos x, siempre dvuelve
1 ¿¿¿¿????
' For Each ctI In objCt.Controls
' If ctI.Parent Is objCt Then nroObjsHijo = nroObjsHijo + 1
' ' If ctI.Parent Is objCt And ctI.Name <> ctI.Parent.Name Then
nroObjsHijo = nroObjsHijo + 1
' Next
Else
nroObjsHijo = 0
End If
Else
nroObjsHijo = objCt.Pages.Count
End If
End Function
'
'*****************************EsFormulario->(IsForm)******'Vinchenzo
Vinc **************
'Esta función recorre la colección de formularios, devolviendo la
existencia o no
'de uno cuyo nombre coincida con el nombre buscado
'--
Private Function EsFormulario(ByVal strName As String) As Boolean
Dim i As Long
For i = 0 To UserForms.Count - 1
If UserForms(i).Name = strName Then
EsFormulario = True
Exit For
End If
Next
End Function

,*****************una de los intentos originales***********************
Function nroObjsHijo(ByVal objCt As Object) As Long
Dim ctI As Control
nroObjsHijo = 0
On Error Resume Next
If TypeName(objCt) <> "MultiPage" Then
For Each ctI In objCt.Controls
If ctI.Parent Is objCt Then nroObjsHijo = nroObjsHijo + 1
Next
Else
nroObjsHijo = objCt.Pages.Count
End If
On Error GoTo 0
End Function

bueno, no veo a que puede deberse, pues con los contenedores reales si
parece funcionar bien, sin agregarles ninguno

si me echais una mano una vez mas os lo agradezco

un saludo y hasta pronto
Ivan
 

Leer las respuestas

#1 Ivan
27/11/2006 - 23:44 | Informe spam
hola de nuevo

no se donde tego la cabeza, pero la funcion era un desproposito tras
cambiarle el nomre 'solo'. bueno, ya esta resuelto de sta forma, aunque
creo que es muy simplificable

Function nroObjsHijo2a(ByVal objCt As Object) As Long
Dim ctI As Control
nroObjsHijo2a = 0
If TypeName(objCt) <> "MultiPage" Then
If EsFormulario(objCt.Name) Or TypeName(objCt) = "Frame" _
Or TypeName(objCt) = "Page" Then
For Each ctI In objCt.Controls
If ctI.Parent Is objCt Then nroObjsHijo2a = nroObjsHijo2a + 1
Next
Else
nroObjsHijo2a = 0
End If
Else
nroObjsHijo2a = objCt.Pages.Count
End If
End Function

un saludo y disculpas por la cag...
ivan

Preguntas similares