Buenas!
Viendo un ejemplo para la terminal me dio por hacerlo con formularios, añadirle la posibilidad de
poder pasar información entre los formularios y agregar la posibilidad de grabar al salir
la información en un archivo setting.
El ejemplo consiste en una recepción de una consulta médica.
Se agregan nombres de pacientes y se van llamando a estos según van llegando.
Ah y si queda alguno y se ha cerrado la consulta, que vuelva mañana.
Los nombres de los pacientes no se eliminan de la lista hasta pasar el tiempo estipulado.
Van en orden de llegada.
Si cerramos la aplicación se guarda la lista de pacientes que no fueron atendidos.
Creo que la forma de pasar información de un formulario a otra es la más adecuada,
aunque sea poca en este caso.
Formulario FMain:
Código:
' Gambas class file
Const TITULO As String = "Recepción de la consulta"
Const TIEMPOMAXCONSULTA As Integer = 5
Private tiempo As Integer
Property nombre As String Use $nombre
Public Sub Form_Open()
Settings.Read(Me)
lstboxPacientes.List = Settings["ListaPacientes", []]
'No se puede llamar a pacientes si no existen
If lstboxPacientes.Count = 0 Then btnCallNext.Enabled = False
End
Public Sub Opciones_Click()
Select Case Last.tag
Case 0
'Añadir un nuevo paciente
RegistrarPaciente()
Case 1
If lstboxPacientes.Count >= 1 Then
Timer1.Delay = 1000
Timer1.Start
'Si ya no hay más pacientes, desactivamos la opción de llamar a otros pacientes
If lstboxPacientes.Count = 0 Then btnCallNext.Enabled = False
Endif
Case 2
Me.Close
End Select
End
Public Function RegistrarPaciente() As String
Dim fpaciente As New FormPaciente
fpaciente.formu = Me
fpaciente.ShowModal()
lstboxPacientes.Add(Me.nombre)
If Not btnCallNext.Enabled Then btnCallNext.Enabled = True
End
Public Sub Timer1_Timer()
If tiempo = TIEMPOMAXCONSULTA Then
lstboxPacientes.Remove(0)
If lstboxPacientes.Count = 0 Then btnCallNext.Enabled = False
tiempo = 0
Me.Title = TITULO
Timer1.Stop
Else
Me.Title = "Paciente: " & lstboxPacientes.List.First & " en la consulta..." & tiempo
tiempo += 1
Endif
End
Public Sub Form_Close()
Settings.Write(Me)
Settings["ListaPacientes"] = lstboxPacientes.List
Settings.Save()
End
Formulario de entrada del nombre del paciente
Código:
Property formu As Object Use $formu
Public Sub Form_Open()
End
Public Sub btnEntrarSalir_Click()
If IsNull(Trim(txtbPaciente.text)) Then
txtbPaciente.Text = ""
Stop Event
Else
$formu.nombre = Trim(txtbPaciente.Text)
Me.Close
Endif
End
Public Sub txtbPaciente_KeyPress()
If Key.Code = Key.Enter Or Key.Code = Key.Return Then btnEntrarSalir_Click()
End
Para alinear mejor los controles y situarlos en el formulario del paciente, usé organizadores.
Puede darse el caso cuando ejecutamos un formulario es que veces cuando se presentan
los controles ( incluso usando organizadores) estos queden más a un lado que otro con respecto
al superior. Esto es a veces es una lata y requiere algo de tiempo.
Saludos