Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Shell Root en 3 Junio 2015, 15:33 pm



Título: ByRef a Objecto ListBox
Publicado por: Shell Root en 3 Junio 2015, 15:33 pm
Tengo este simple código sólo que ahora me la paso más en C# y no recuerdo bien como es en VB.

Tengo una función donde realizo una petición a la base de datos en SQL Server, esta ahi excelente. Pero necesito que desde esa misma función lo cargue a un ListBox, tengo lo siguiente:

Código
  1. Public Sub LoadHours(txtFecha As String, txtTarjeta As String, ByRef Lsb As ListBox)
  2. ' [SNIP]
  3.        Do While Not Rs.EOF And Not Rs.BOF
  4.            Lsb.AddItem Rs.Fields(0).Value
  5.            ' Sí lo muestro en un MsgBox se ve correctamente los datos de la DB
  6.            Rs.MoveNext
  7.        Loop
  8. ' [SNIP]
  9. End Sub

Se supone que al pasarlo como ByRef me tomaría el objecto del formulario e ingresaría los valores de la función dentro del ListBox.

Código
  1. Call LoadHours(Me.txtFecha.Text, Me.txtTarjeta.Text, Me.lsbHoras)

El caso es que me dice: No coinciden los tipos.


Título: Re: ByRef a Objecto ListBox
Publicado por: tincopasan en 3 Junio 2015, 17:10 pm
probablemente deberías pasar como cadena los valores que quieres agregar al listbox lsb.additem str(etc)


Título: Re: ByRef a Objecto ListBox
Publicado por: Shell Root en 3 Junio 2015, 17:26 pm
No creo ya que realizo la prueba basica y no me funciona, por ejemplo:

Código
  1.        Do While Not Rs.EOF And Not Rs.BOF
  2.            'Lsb.AddItem Rs.Fields(0).Value
  3.            Lsb.AddItem "1"
  4.            Rs.MoveNext
  5.        Loop

A lo que me refiero es que funciona todo correctamente, menos cuando paso or ByRef el objecto ListBox.


Título: Re: ByRef a Objecto ListBox
Publicado por: tincopasan en 3 Junio 2015, 17:31 pm
y si en vez de byref los pasas como byval, aclaro que puedo estar re equivocado hace años que no uso vb


Título: Re: ByRef a Objecto ListBox
Publicado por: pkj en 3 Junio 2015, 17:36 pm
Es muy raro.
Seguro que es un ListBox?
Yo acabo de probar esto:
En el Form1 tengo este command
Código
  1. Private Sub Command1_Click()
  2.   Form2.PRUEBA Me.List1
  3. End Sub

y en el Form2 tengo esto
Código
  1. Public Sub PRUEBA(ByRef LSB As ListBox)
  2.  LSB.AddItem 22332
  3.  LSB.AddItem "Prueba"
  4. End Sub

Y el listbox recibe las dos líneas sin problemas.

Prueba a convertirlo en cadena:
Código
  1. Lsb.AddItem cStr(Rs.Fields(0).Value)

Suerte

y si en vez de byref los pasas como byval, aclaro que puedo estar re equivocado hace años que no uso vb

Si lo pasas ByVal los cambios no afectan al ListBox original.

Saludos


Título: Re: ByRef a Objecto ListBox
Publicado por: Shell Root en 3 Junio 2015, 17:50 pm
Re-Seguro que si es un Listbox el objecto del formulario y tambien la variable del ByRef!


Título: Re: ByRef a Objecto ListBox
Publicado por: pkj en 3 Junio 2015, 18:02 pm
Prueba con cStr()

Prueba quitando el ByRef, ya que si no pones nada es ByRef (yo por eso siempre pongo byval a casi todo)

Prueba cambiando la declaracion en lugar de declararlo como ListBox hazlo como Variant o como Object (como Variant no se si lo pillara)

Si se me ocurre algo mas ya te aviso :D

Suerte


Título: Re: ByRef a Objecto ListBox
Publicado por: Shell Root en 3 Junio 2015, 18:08 pm
Realmente es una M13RDA, ya funciona perfectamente. Así,

Código
  1. Public Sub LoadHours(txtFecha As String, txtTarjeta As String, ByRef Lsb As Object)

Gracias!


Título: Re: ByRef a Objecto ListBox
Publicado por: pkj en 3 Junio 2015, 18:25 pm
Hay que echarle imaginacion y no darse por vencido  ;)


Título: Re: ByRef a Objecto ListBox
Publicado por: BlackZeroX en 21 Junio 2015, 07:00 am
Tengo este simple código sólo que ahora me la paso más en C# y no recuerdo bien como es en VB.

Tengo una función donde realizo una petición a la base de datos en SQL Server, esta ahi excelente. Pero necesito que desde esa misma función lo cargue a un ListBox, tengo lo siguiente:

Código
  1. Public Sub LoadHours(txtFecha As String, txtTarjeta As String, ByRef Lsb As ListBox)
  2. ' [SNIP]
  3.        Do While Not Rs.EOF And Not Rs.BOF
  4.            Lsb.AddItem Rs.Fields(0).Value
  5.            ' Sí lo muestro en un MsgBox se ve correctamente los datos de la DB
  6.            Rs.MoveNext
  7.        Loop
  8. ' [SNIP]
  9. End Sub

Se supone que al pasarlo como ByRef me tomaría el objecto del formulario e ingresaría los valores de la función dentro del ListBox.

Código
  1. Call LoadHours(Me.txtFecha.Text, Me.txtTarjeta.Text, Me.lsbHoras)

El caso es que me dice: No coinciden los tipos.

Debes usar las interfaces en lugar de las clases asi puedes usar ByVal sin problemas... por ejemplo en JAVA (Que es el que me da de comer actualmente) yo uso List para cualquier clase que herede de esta y no tengo problemas...

Si no mal recuerdo en .Net es List...

Ducles Lunas!¡.


Título: Re: ByRef a Objecto ListBox
Publicado por: Miseryk en 22 Junio 2015, 15:09 pm
Tengo este simple código sólo que ahora me la paso más en C# y no recuerdo bien como es en VB.

Tengo una función donde realizo una petición a la base de datos en SQL Server, esta ahi excelente. Pero necesito que desde esa misma función lo cargue a un ListBox, tengo lo siguiente:

Código
  1. Public Sub LoadHours(txtFecha As String, txtTarjeta As String, ByRef Lsb As ListBox)
  2. ' [SNIP]
  3.        Do While Not Rs.EOF And Not Rs.BOF
  4.            Lsb.AddItem Rs.Fields(0).Value
  5.            ' Sí lo muestro en un MsgBox se ve correctamente los datos de la DB
  6.            Rs.MoveNext
  7.        Loop
  8. ' [SNIP]
  9. End Sub

Se supone que al pasarlo como ByRef me tomaría el objecto del formulario e ingresaría los valores de la función dentro del ListBox.

Código
  1. Call LoadHours(Me.txtFecha.Text, Me.txtTarjeta.Text, Me.lsbHoras)

El caso es que me dice: No coinciden los tipos.

(http://cdn.meme.am/instances/500x/63085535.jpg)

(http://s23.postimg.org/le7a6z5tl/Sin_t_tulo.png)


Título: Re: ByRef a Objecto ListBox
Publicado por: BlackZeroX en 6 Julio 2015, 19:12 pm
No creo ya que realizo la prueba basica y no me funciona, por ejemplo:

Código
  1.        Do While Not Rs.EOF And Not Rs.BOF
  2.            'Lsb.AddItem Rs.Fields(0).Value
  3.            Lsb.AddItem "1"
  4.            Rs.MoveNext
  5.        Loop

A lo que me refiero es que funciona todo correctamente, menos cuando paso or ByRef el objecto ListBox.

Castealo... por Evil cast no recuerdo que :)

Código
  1. Lsb.AddItem "" & Rs.Fields(0).Value
  2.  

Dulces Lunas!¡.