Ejercicio I01 - La lista del super
Consigna
El objetivo será crear una aplicación que maneje una lista de supermercado. Se podrá agregar, eliminar y modificar los elementos de la lista.
Crear un proyecto de Windows Forms con un formulario llamado FrmAltaModificacion
que se vea como el siguiente:
Deberá iniciar centrado en la pantalla (propiedad
StartPosition
).No deberá tener menú de control (propiedad
ControlBox
).No deberá poder cambiar de tamaño (propiedad
FormBorderStyle
).No tendrá ícono (propiedad
ShowIcon
).Tendrá un
TextBox
llamadotxtObjeto
, unButton
llamadobtnConfirmar
y unButton
llamadobtnCancelar
.El
txtObjeto
no deberá poder contener un texto de más de 50 caracteres (propiedadMaxLength
).Tendrá una propiedad
Objeto
pública y de sólo lectura que retornará el contenido deltxtObjeto
.Al instanciarse deberá configurarse de acuerdo a la siguiente información que recibirá como argumentos en su constructor:
- El título del formulario.
- El texto que contendrá el
txtObjeto
. - El texto del
btnConfirmar
.
Si se presiona el
btnConfirmar
o la teclaenter
(posicionados dentro delTextBox
):- Validar que el
txtObjeto
no se encuentre vacío. - Si se encuentra vacío mostrar una advertencia y no avanzar.
- Si es válido, cargar la propiedad
DialogResult
con el valorDialogResult.OK
y cerrar el formulario.
- Validar que el
TIP
El evento KeyPress
se acciona cuando el usuario está haciendo foco en el control que es dueño del evento y presiona una tecla.
Uno de los parámetros de entrada del manejador de dicho evento es de tipo KeyPressEventArgs
y contiene una propiedad KeyChar
que tendrá como valor el caracter correspondiente a la tecla presionada por el usuario.
Por ejemplo, para saber si el usuario presionó la tecla enter
podemos hacer lo siguiente:
if (e.KeyChar == (char)13) // 13 es el código ASCII que representa a ENTER.
{
// ...
}
Si queremos saber si el usuario presionó s
o S
(shift + s
) podemos hacer lo siguiente:
if (e.KeyChar == 's' || e.KeyChar == 'S')
{
// ...
}
- Si se presiona el
btnCancelar
o la teclaescape
(posicionados dentro delTextBox
), se deberá cargar la propiedadDialogResult
con el valorDialogResult.Cancel
y cerrar el formulario.
Agregar otro formulario llamado FrmListaSuper
que se vea como el siguiente:
Deberá ser el formulario que se muestra al iniciar la aplicación.
Tendrá un atributo
listaSupermercado
de tipoList<string>
que contendrá los elementos de la lista del supermercado.Deberá iniciar centrado en la pantalla (propiedad
StartPosition
).Tendrá un
ListBox
llamadolstObjetos
.- Mostrará la lista de objetos pendientes de comprar en el supermercado.
- Estará anclado a todos los bordes del formulario (propiedad
Anchor
).
Tendrá un
Button
llamadobtnAgregar
cuyo texto será "+" y al pasar por encima deberá mostrar un tooltip con el texto "Agregar objeto".- Deberá estar anclado arriba y a la derecha (propiedad
Anchor
). - Al accionarlo instanciará un
FrmAltaModificacion
y lo mostrará de forma modal.- El título será "Agregar objeto".
- El contenido del
txtObjeto
será un texto vacío. - El texto del
btnConfirmar
será "Agregar".
- Si la propiedad
DialogResult
de la instancia deFrmAltaModificacion
valeDialogResult.OK
, agregar el elemento retornado por la propiedadObjeto
a la lista del supermercado. Caso contrario, no hacer nada.
- Deberá estar anclado arriba y a la derecha (propiedad
Tendrá un
Button
llamadobtnEliminar
cuyo texto será "-" y al pasar por encima deberá mostrar un tooltip con el texto "ELiminar objeto".- Deberá estar anclado arriba y a la derecha (propiedad
Anchor
). - Al accionarlo deberá borrar el objeto seleccionado en la lista. Si no hay nada seleccionado, no hacer nada y mostrar un cartel informando que se debe seleccionar un elemento de la lista.
- Deberá estar anclado arriba y a la derecha (propiedad
Tendrá un
Button
llamadobtnModificar
cuyo texto será "M" y al pasar por encima deberá mostrar un tooltip con el texto "Modificar objeto".- Deberá estar anclado arriba y a la derecha (propiedad
Anchor
). - Al accionarlo instanciará un
FrmAltaModificacion
y lo mostrará de forma modal.- El título será "Modificar objeto".
- El contenido del
txtObjeto
será el elemento seleccionado enlstObjetos
. Si no hay nada seleccionado, no hacer nada y mostrar un cartel informando que se debe seleccionar un elemento de la lista. - El texto del
btnConfirmar
será "Modificar".
- Si la propiedad
DialogResult
de la instancia deFrmAltaModificacion
valeDialogResult.OK
, modificar el objeto en la lista del supermercado asignándole el valor de la propiedadObjeto
. Caso contrario, no hacer nada.
- Deberá estar anclado arriba y a la derecha (propiedad
En el manejador del evento
Load
se deberá buscar el archivolistaSupermercado.xml
en la carpeta de datos de aplicaciones (Environment.SpecialFolder.ApplicationData
) y, si existe, deserializarla desde formato XML como una lista destring
.- Cargar
lstObjetos
con los elementos de la lista. - Si el archivo no existe, no hacer nada.
- Cargar
Ante cualquier acción se deberá actualizar el contenido de
lstObjetos
y el archivolistaSupermercado.xml
, que contendrá la lista de objetos serializada a formato XML y se encontrará en la ubicación antes nombrada.
TIP
Para actualizar el contenido de un ListBox
se debe cargar la propiedad DataSource
como null
y luego asignarle a la misma la colección de elementos:
listBox.DataSource = null;
listBox.DataSource = listaSupermercado;
IMPORTANTE
Cualquier excepción deberá ser manejada mostrando un MessageBox
con el mensaje y el stack trace.
Reutilizar código en todo el proyecto siguiendo el principio DRY.
Resolución
Video | Código |
---|