Funciones asociadas a Controles

Buenos das, mi nombre es Jorge Baldracchi de Argentina. Soy nuevo en XOJO pero vengo del Visual Basic 6 y tengo algunas dudas en la migracin de mi cdigo. Por ejemplo el que planteo a continuacin. Intento crear un funcin que se asocie a controles ya que tengo varios y el cdigo es repetido. Yo en visual dentro de un Modulo tenia algo as:

Nota: El siguiente es a modo de ejemplo, seguro tiene errores pero es para darles un panorama.

Public Function LlenarCombo (Combo as Combobox, Tabla as String, ColumnaDato as String, ColumnaID as String)

Dim rs as Recordset
Dim i as Integer

rs = db.SqlSelect ("SELECT * FROM " + Tabla )
i = 0
While not rs.EOF

Combo.AddRow rs.Field (ColumnaDato)
Combo.RowTag(i) = rs.Field (ColumnaID)
i = 0
rs.MoveNext
wend

End Fuction

Bueno lo que quiero desarrollar es eso, que mediante una funcin desde una simple llamada por ejemplo del evento OPEN del formulario se ejecute el rellanado del ComboBox:

LlenarCombo (ComProveedor, “PROVEEDORES”, “NOMBRE”, “ID”)

Se entiende lo que quiero hacer?

Gracias de antemano por la lectura y las respuestas. Saludos.-

Hola Jorge deberias poner combo.DeleteAllRows antes del while y rs.close despus del wend y en vez de i=0 dentro del bucle deberias poner i=i+1 despues del movenext

Public Function LlenarCombo (Combo as Combobox, Tabla as String, ColumnaDato as String, ColumnaID as String)
Dim rs as Recordset
Dim i as Integer
rs = db.SqlSelect ("SELECT * FROM " + Tabla )
i = 0
combo.DeleteAllRows
While not rs.EOF
   Combo.AddRow rs.Field (ColumnaDato)
   Combo.RowTag(i) = rs.Field (ColumnaID)
   rs.MoveNext
   i=i+1
wend
rs.close
End Fuction

Hola tocayo, gracias por la respuesta. Pero estara necesitando saber como realizar una funcin en XOJO con esas caractersticas dadas. Que se pueda llamar desde cualquier evento y ejecute una sentencia con diferentes datos incluidos. El cdigo lo escrib en modo ejemplo por eso destaque que tenga errores. De la forma expresada funciona en Visual Basic 6 pero no en XOJO. Gracias de ante mano.-

Tendras que crear un mdulo que se llama por ejemplo “funciones” y all disear un mtodo que tenga un mbito pblico para que lo llames desde cualquier parte del programa, debera quedarte algo as:

Sub LlenarCombo (Combo as Combobox, Tabla as String, ColumnaDato as String, ColumnaID as String)
Dim rs as Recordset
Dim i as Integer
rs = db.SqlSelect ("SELECT * FROM " + Tabla )
i = 0
combo.DeleteAllRows
While not rs.EOF
   Combo.AddRow rs.Field (ColumnaDato)
   Combo.RowTag(i) = rs.Field (ColumnaID)
   rs.MoveNext
   i=i+1
wend
rs.close
End Sub

Hola! Solucionado. Me diste la ayuda correcta, solo que no sabia como hacer la base de datos global en el proyecto. Todos los ejemplos cuelgan desde el formulario. A fuerza de prueba y error lo logre. Gracias nuevamente!

Hola,

Otra forma sera crear una subclase de ComboBox, que tenga una funcin LlenarCombo y el nmero de propiedades necesario (por ejemplo el objeto base de datos, o los strings Tabla, ColumnaDato, … pero me pierdo en la parte de la base de datos, no las utilizo nunca). Para referirse al propio combobox utiliza “Me”, por ejemplo Me.AddRow.

La ventaja es que evitas tener mtodos y propiedades globales haciendo que el cdigo del combobox est disponible slo para el combobox, que es lo ideal.

Julen