Visual Basic - Pasar control como parametro

Life is soft - evento anual de software empresarial
 
Vista:

Pasar control como parametro

Publicado por Eduardo (43 intervenciones) el 29/08/2003 01:31:29
Hola tengo un problema hago una aplicacion en donde tengo que hacer varias operaciones iguales a un control y trato de hacer una funcion en donde al pasarle el control me haga las intrucciones pertinentes y no estas escribiendo para cada control las intrcciones el problema radica en que al correrle y pasarle el parametro marca error de type mach un ejmplo de esas funciones es

Public Function seleccionar(caja As TextBox)

With caja
.SelStart = 0
.SelLength = Len(caja)
'.SetFocus
End With
End If

End Function

no necesariamente es esto pero este es una de las funciones que tenia ojala alguien me diga en que estoy mal
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Pasar control como parametro

Publicado por Juan (284 intervenciones) el 29/08/2003 12:20:00
Pues a mi me funciona tu función, bueno más o menos después de quitar ese "end if" solitario que tienes y de hacer un par de pequeños cambios al código. Pero lo importante es que la cabecera la tengo igual,
con el mismo parámetro declarado del tipo TextBox. Puede que te estés equivocando en la llamada.

Te pongo como lo tengo yo que si que funciona :

Private Sub Command1_Click()
seleccionar Text1
End Sub

Public Function seleccionar(caja As TextBox)
With caja
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
End Function

En este mismo código, donde tengo la llamada así:

seleccionar Text1

si encierro Text1 entre paréntesis me da el error que tú dices, puede que ese sea el fallo que estás cometiendo. La explicación es ,según creo yo, que al encerrarlo entre paréntesis ya no estamos pasando el TextBox sino su propiedad por defecto que es .Text.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 145
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

RE:Pasar control como parametro

Publicado por Sah1d Ra (191 intervenciones) el 07/09/2021 17:31:19
tengo entendido que cuando no usamos paréntesis solo mostrara o procesara algo

1
msgbOx "hola mundo"

y cuando usamos paréntesis es porque devolverá un valor.

1
Resp = msgbOx ("Continuar?",36)

saludos y felices líneas de programaci10n
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pasar control como parametro

Publicado por Fonfi (1 intervención) el 07/09/2021 12:10:54
Instrucción llamadora:
-----------------------------

Call Actualiza(Dia, Mes, Ano, Calendario.TB_F1) ' "Calendario.TB_F1" es el "UserForm.TextBox" que quiero actualizar

Subprograma receptor:
-------------------------------

Public Sub Actualiza(Dia As Long, Mes As Long, Ano As Long, ByRef TB As Object) ' En lugar de "Object" tambien funciona "Control"
Dim FechaActualizada As Date
FechaActualizada = VBA.DateSerial((VBA.CInt(Ano)), (VBA.CInt(Mes)), (VBA.CInt(Dia)))
TB.Value = FechaActualizada
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 355
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Pasar control como parametro

Publicado por raul (160 intervenciones) el 07/09/2021 19:14:34
Lo del error TIPE MACH 'Error en tipo de datos o en validación' puede deberse a muchos factores desde DLLs, versiones etc; lo importante es que le estas enviando una clase y las variables no soportan eso...aunque VB6 es muy versatil y a veces hace como que te interpreta y asume el error. Lo correcto seria

PUBLIC sub SELECCIONAR (CAJA as OBJECT)'escrito en modulo

¿porque así? bien TEXTBOX es el nombre de una clase y a su vez es el nombre de un OBJETO si así lo denominases claro esta. Si tomamos en cuenta que algunas versiones de DLLs son más rigidas que otras asumimos que existe la posibilidad de un error en algun momento si pasamos esto CAJA as TEXTBOX mientras que nunca habra protesta si AT INICIO indicamos que es un objeto.

Lo segundo las funciones siempre tienen que devolver algo por defecto un valor VARIANT si no vamos a consumir el valor porque usar FUNCTION para gastar recursos ¿No sé? yo usaria SUB

Lo tercero desde donde invoco el procedimiento. Lo correcto seria

Private Sub TXT1_GotFocus()' Al recibir el foco de atención
call seleccionar
End Sub

Public SUB seleccionar(CAJA As OBJECT)
CAJA.SelStart = 0
CAJA.SelLength = Len(CAJA.TEXT)
End Function

4- Planteas la posibilidad de querer realizar varias operaciones en la misma funcion esto es simple
Public SUB MULTIPLES(CAJA As OBJECT, OP as integer)
select case OP
case 1' Seleccionar
CAJA.SelStart = 0
CAJA.SelLength = Len(CAJA.TEXT)
End select
End Function

incluso puedes esto
Public SUB MULTIPLES(OBJ As OBJECT, OP as integer)
if typename(OBJ) = "Textbox" then 'Nombre de la clase
select case OP
case 1' Seleccionar
OBJ.SelStart = 0
OBJ.SelLength = Len(CAJA.TEXT)
End select
end if
End Function
o sea que la subrutina ahora sirve para multiples objetos


PD: vi que no entendias lo de los parentices de MSGBOX. El tema es que MSGBOX es una intrucción y una función donde la diferencia reside en los parentices ejemplo

MSGBOX "Hola Mundo" 'Muestra en pantalla un mensage

ahora

if msgbox("¿Quieres salir?", vbquestion + vbyesno) = vbyes then 'te muestra un mensage con los botes yes/no para que interactues
unload me
end if
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar