MultiInput

 
 MultiInput

Una nueva clase para  facilitar la introducción de datos en Gambas2





En gambas existe la clase InputBox, con la cual podemos obtener fácilmente del usuario una cadena para asignarla posteriormente a una variable. Un ejemplo:

 Asi, obtenemos el valor de "edad".


Pues bien, he desarrollado una nueva clase , para poder trabajar con mas asignaciones, obteniendo un formulario  como este:

Para poderlo usar en vuestros programas, os paso el código fuente,del cual tendreis que:
- Descomprimirlo y abrirlo con Gambas2.
- Crear el ejecutable (Proyecto/Crear/Ejecutable).
- Os creara un nuevo control personalizado que lo podréis incluir en vuestros proyectos (Proyecto/Propiedades/Componentes/Componentes del usuario)

Os explico a continuación el uso de la nueva clase:

Propiedad/Método Nombre Definición
Atributo titulo Define el titulo del formulario.
Método add Añade una variable,texto de presentación, y opcionalmente valor inicial
Método mostrar Muestra el formulario para rellenar los datos.
Nota: El botón cancelar hara que los valores no se guarden y se muestre “N/A”
Método devuelve Devuelve una cadena de texto del valor de la variable que le hayamos indicado.


Os paso también un ejemplo del uso de la nueva clase.
Esta es la transcripcion del código del ejemplo:

PUBLIC SUB Form_Open()
DIM mu AS NEW MultiInput
mu.titulo = "hola esto es una prueba"
mu.add("nombre1", "nombre usuario:", "ninguno")
mu.add("apellidos1", "primer apellido:", "")
mu.add("apellidos2", "segundo apellido:", "")
mu.add("direccion", "direccion de vivienda:")
mu.mostrar()
TextArea1.Text = mu.devuelve("nombre1") & "\n"
TextArea1.Text &= mu.devuelve("apellidos1") & "\n"
TextArea1.Text &= mu.devuelve("apellidos2") & "\n"
TextArea1.Text &= mu.devuelve("direccion") & "\n"
TextArea1.Text &= "Ahora probamos con una variable que no existe:" & "\n"
TextArea1.Text &= mu.devuelve("dksl") & "\n"
END


Como veis lo primero que hacemos es crear nuestra nueva instancia "mu" del MultiInput.

Luego le voy pasando el titulo del formulario
mu.titulo

Y voy añadiendo variables, primero el nombre, luego el texto de la etiqueta texto que pondra, y el valor por defecto.
mu.add({nombre_variable},{texto de la etiqueta},{valor opcionar})

Luego llamamos al formulario con:
mu.mostrar()

Y para obtener los valores, usamos el método devuelve indicandole el nombre de la variable
mu.devuelve({nombre_variable})
¿como lo hice?
Os enseño la estructura del proyecto:

Modulo var:
Variables globales para acceder desde cualquier parte del programa

' Gambas module file
PUBLIC devuelve AS String
PUBLIC numerototal AS Integer = 10
PUBLIC labelarray AS NEW Object[]
PUBLIC textboxarray AS NEW Object[]
PUBLIC label_temp AS Object
PUBLIC textbox_temp AS Object
PUBLIC contador AS Integer
PUBLIC valores AS String[10]
PUBLIC nombrevariablearray AS NEW String[10]


Clase multiinput:
La que realmente vamos a usar como nueva clase

' Gambas class file
EXPORT
'añadimos la propiedad Titulo
'1º para que se pueda ver en el cuadro de propiedades, la añadimos a las 'propiedades existentes
PUBLIC CONST _Properties AS String = "*,titulo"
'2 creamos la propiedad en si
PROPERTY titulo AS String
PRIVATE htitulo AS String
'función de lectura

PRIVATE FUNCTION titulo_Read() AS String
RETURN htitulo
END
'función de escritura

PRIVATE SUB titulo_Write(Value AS String)
htitulo = value
END

PUBLIC SUB add(nombreVariable AS String, textoVariable AS String, OPTIONAL textoinicial AS String)
var.contador += 1
var.label_temp = NEW Label(FTest)
var.label_temp.text = textoVariable
var.label_temp.x = 14
var.label_temp.y = 35 + 14 + (50 - 14) * (var.contador - 1)
var.label_temp.width = 231
var.label_temp.height = 28
var.label_temp.alignment = 2
var.labelarray.Add(var.label_temp)
var.textbox_temp = NEW TextBox(FTest)
var.textbox_temp.text = textoinicial
var.textbox_temp.x = 252
var.textbox_temp.y = 35 + 14 + (50 - 14) * (var.contador - 1)
var.textbox_temp.width = 294
var.textbox_temp.height = 28
var.textboxarray.Add(var.textbox_temp)
var.nombrevariablearray[var.contador - 1] = nombreVariable
ftest.height = var.textbox_temp.y + 40
END

PUBLIC FUNCTION devuelve(nombreVariable AS String) AS String
DIM a AS Integer
DIM cadena AS String
'devuelve el texto del textbox referido al nombreVariable
FOR a = 0 TO var.nombrevariablearray.count - 1
IF NOT var.devuelve = "ok" THEN
Message.Info("se cancelo la operacion de introducción de datos")
ELSE
IF Upper(nombreVariable) = Upper(var.nombrevariablearray[a]) THEN
cadena = var.valores[a]
RETURN cadena
ENDIF
ENDIF
NEXT
PRINT "Error: " & nombreVariable & " variable desconocida N/A"
RETURN "N/A"
END

PUBLIC FUNCTION mostrar()
'escribe en el formulario todos los textbox y label segun el numero que haya definido (contador)
ftest.Caption = ME.titulo
FTest.ShowModal
END

Formulario Ftest:

' Gambas class file

PUBLIC SUB _new()
END

PUBLIC SUB Form_Open()
DIM mu AS NEW MultiInput
ME.Center
END

PUBLIC SUB ToolButtonAceptar_Click()
DIM a AS Integer
'boton de aceptar
var.devuelve = "ok"
FOR a = 0 TO var.textboxarray.count - 1
var.valores[a] = var.textboxarray[a].text
NEXT
ME.close
END

PUBLIC SUB ToolButtonCancelar_Click()
'boton cancelar
var.devuelve = "cancel"
ME.close
END

Formulario Fmain:
Este es un formulario de pruebas Fmain (que solo lo uso para ejecutar el control en pruebas, definiciendolo como "clase de inicio", en vez que lo sea  la clase Multiinput):

' Gambas class file

PUBLIC SUB Form_Open()
DIM mu AS NEW MultiInput
mu.add("hola", "introduce:", "hola...")
mu.add("Adios", "introoduce2:", "adios...")
mu.add("valor", "introduce3:", "valor3")
mu.mostrar()
PRINT mu.devuelve("hola")
PRINT mu.devuelve("Adios")
PRINT mu.devuelve("valor")
END