Checkbox y la función

Como puede uno crear una función para saber si uno de los checkbox fue marcado, yo pesen que esta serviría pero no he podido llegarle:
Public Function vChe(ByVal nFra As Frame) As Boolean
Dim chk As CheckBox, oFra As Object
Dim i As Byte, contador As Byte
For Each chk In nFra
'For i = 0 To 4
If chk.Value = 1 Then
contador = contador + 1
Else
contador = contador + 0
End If
Next chk
If contador <> 0 Then
verifi = True
Else
verifi = False
End If
End Function
De hecho no tiene mucha cabeza, pero ando viendo a ver, porque lo que quiero es delimitarlo a un frame (que lo tiene contenido)

1 Respuesta

Respuesta
1
No te sirve así
La colecion que tenga un form es de controles. UN FRAME NO TIENE UNA COLLECCION DE CONTROLES. Pero puedes crearsela tu como un control activeX. El método suele ser usar las tres primeras letras del nombre de un control para designar que son. Lease chk para checkbox, cmd para Buttons, txt para textboxs ... de ese modo este código te serviría.
Public Function vChe(ByVal nFra As Form) As Boolean
Dim chk As CheckBox, oFra As Object
Dim i As Byte, contador As Byte
For Each oFra In nFra.Controls
'For i = 0 To 4
If Left(oFra.Name, 3) = "chk" Then
If oFra.Value = vbChecked Then
contador = contador + 1
Else
contador = contador + 0
End If
Else
contador = contador + 0
End If
Next chk
If contador <> 0 Then
verifi = True
Else
verifi = False
End If
End Function
wuauuu esta muy bieno, pregunto, porque lo estoy tranandod e hacer pero aun no pego, tratando de crear la función para darle el nombre del frame, es decir que indicarle que form y a la ves el frame, pero no pego, ¿y qué es esod e las Colecctions? Para aprender.
Eso será por que tienes un image list o un objeto similar en el formulario. Ese objeto en cuestión no tiene la propiedad container y por eso falla.
Lo único que debes hacer es preguntar si el objeto es ese y si lo es pasar al siguiente.
Cuando falle, pulsa shift F9 sobre oFra y así sabrás que control es. Y trátalo como una excepción.
Muchas Gracias por tu ayuda, ¿pero digo no hay alguna manera de pregustar por el contenido de un frame?, es que ando buscando la manera saber si se selecciono tanciquiera uno de los CheckBox, estom porque tengo en un tabbed los CheckBox y por lo menos uno tiene que estar marcado, si los hago por un ciclo, pero me llamaba la atención si existía otra manerad e poder hacerlo.
Muchas Gracias
Pero si el frame se lo mandas por parámetro :
Public Function vChe(ByVal nFra As Form, fFra As Frame) As Boolean
Dim chk As CheckBox, oFra As Object
Dim i As Byte, contador As Byte
For Each oFra In nFra.Controls
'For i = 0 To 4
If Left(oFra.Name, 3) = "chk" _
And oFra.Container.Name = fFra.Name Then
If oFra.Value = vbChecked Then
contador = contador + 1
Else
contador = contador + 0
End If
Else
contador = contador + 0
End If
Next chk
If contador <> 0 Then
verifi = True
Else
verifi = False
End If
End Function
Y lo de las colecciones... Veamos es una estructura de datos de Visual basic. Como un vector.
Añades datos al vector de este modo :
ColectionOfFrames. Add Frame1, Frame1. Name, frameSiguiente, FrameAnterior
El primer dato es el Objeto que introduces, el segundo una clave para buscarlo y las siguientes es para ordenar el vector
Con esto obtienes el número de elementos en la colección :
ColectionOfFrames. Count
Y para obtener el elemento puedes hacerlo por el orden :
ColectionOfFrames. Item(1)
O por la clave
ColectionOfFrames. Item("Clave a buscar")
No se si ha quedado claro.
Puedes hacerlo de un modo sencillo :
Public Function vChe(ByVal nFra As Form) As Boolean
Dim chk As CheckBox, oFra As Object
Dim i As Byte, contador As Byte
For Each oFra In nFra.Controls
'For i = 0 To 4
If Left(oFra.Name, 3) = "chk" _
And oFra.Container.Name = "NOMBREDELFRAMEQUEQUIERES"
Then
If oFra.Value = vbChecked Then
contador = contador + 1
Else
contador = contador + 0
End If
Else
contador = contador + 0
End If
Next chk
If contador <> 0 Then
verifi = True
Else
verifi = False
End If
End Function
Con eso te serviría. No es muy ortodoxo, pero...
Otro modo (Yo no suelo usarlo nunca) es jugar con Collections. Pero para explicártelo tendría que documentarme yo. Si estas muy interesado, lo ojeo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas