' cuando se decide añadir un nuevo elemento debe invocarse esta función tras recoger, los datos de nombre, categoría y fecha de controles a tal efecto.
' la función devuelve un resultado que es el dato que debería añadirse justo al salir de la función al listbox.
public Function AñadirElemento(byref Optional Nombre as variant, byref Optional Cat as variant, byref Fecha as variant) as long
if (not(p_Selecciones)) <> -1 then ' si la matriz ya está redimensionada...
if ubound(p_Selecciones) = ( list1.listcount-1) then ' si la matriz tiene tantos elementos como la lista
redim preserve p_Selecciones(0 to list1.listcount + 10) ' añadimos 10 elementos más de golpe...
end if
p_Codigo = p_Codigo +1 ' el código se auotincrementa con cada nuevo añadido
else ' si la matriz no está redimensionada, la redimensionamos, con 10 elementos
redim p_Selecciones(0 to 9)
p_Codigo = 0
end if
p_Actual = list1.listcount + 1
p_Selecciones(p_Actual).Codigo = p_Codigo
on local error resume next
if not IsMissing(Nombre) then
p_Selecciones(p_Actual).Nombre=trim$(cstr( Nombre)) ' si se produce un error, contínua
if err.number <> 0 then
p_Selecciones(p_Actual).Nombre= cstr(Codigo)
err.clear
end if
end if
if not IsMissing(Cat) then
p_Selecciones(p_Actual).Categoria=trim$(cstr( Cat)) ' si se produce un error, contínua
err.clear
end if
if not IsMissing(Fecha) then
p_Selecciones(p_Actual).Fecha=cdate( Fecha) ' si se produce un error, contínua
if err.number <> 0 then
p_Selecciones(p_Actual).Fecha= Now
err.clear
end if
end if
AñadirElemento= p_Codigo
end function
public property get Codigo as long ' sólo lectura
Codigo = p_Selecciones(p_Actual).Codigo
end property
public property get Nombre as string ' leemos el nombre actual seleccionado
Nombre = p_Selecciones(p_Actual).Nombre
end property
public property let Nombre(byval n as string) ' cambiamos el nombre del elemento actualmente seleccionado
if n <>"" then ' sólo se acepta si la cadena no está vacía...
p_Selecciones(p_Actual).Nombre= n
else
msgbox "El nombre debe tener al menos 1 carácter." ' ó 4, 6, etc...
end if
end property
public property get Categoria as string
Categoria = p_Selecciones(p_Actual).Categoria
end property
public property let Categoria (byval c as string) ' cambiamos la Categoria del elemento actualmente seleccionado
if c <>"" then
p_Selecciones(p_Actual).Categoria = c
else
msgbox "No se indicó categoría, no fue cambiada..." ' ó lo que quieras hacer...
end if
end property
public property get Fecha as Date
Set Fecha = p_Selecciones(p_Actual).Fecha
end property
public property set Fecha (byval c as Date) ' cambiamos la Categoria del elemento actualmente seleccionado
if not(f) isnothing then
set p_Selecciones(p_Actual).Fecha = f
else
msgbox "No se indicó fecha. La fecha no ha sido cambiada."
end if
end property
public property get Actual as long ' se lee el índice de la matriz que es el actual
Actual = p_Actual
end property
public property let Actual (byval a as long) ' seleccionamos otro
dim x as long
if (a> -1) and (a<= list1.listcount) then
if a <> p_actual then
x= p_Actual
p_Actual = a ' ahora, antes
' raiseevent SeleccionCambiada( P_Actual, x) ' si tuviéramos un evento quizás nos interesara indicar cuando cambió la selección.
end if
else
msgbox "No existe el elemento " & a & " " & "sigue seleccionado el elemento " & p_Actual
end if
end property
' ... de igual modo puedes recrear una función para eliminar un eleemnto de la matriz, fíjate que basta con borrarlo de la lista (list1) y luego vaciarlo en la matriz.
' Si la matriz tuviera ahora menos de 10 elementos que la lista, la matriz la redimensionamos con 10 elementos menos
' (no necesita en este caso vaciar el elemento que será eliminado).
' un ejemplo de selección a través del listbox
Private Sub List1_Click()
if list1.listindex > -1 then ' si la lista tiene elementos, entonces lo seleccionamos
Actual = list1.listindex
' como hemos supuestamente cambiado la selección, actualizamos los datos...sobre unos textbox o mejor labels....
txtNombre.text = nombre
txtCat.text = categoria
txtFecha.Text= Fecha
end if
End Sub