practica 1.docx
DESCRIPTION
Windows FormsTRANSCRIPT
UNIVERSIDAD NACIONAL AUTONOMA DE NICARAGUA
PRACTICA 1 : PROGRAMACION VISUAL C#
PRACTICA 1
Miguel Bàrcenas
15/02/2015
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
Introducción a Windows forms Desde la perspectiva de C#, un programa con interfaz gráfica, que se ejecuta bajo el
sistema operativo Windows, es muy similar a un programa de consola. La única diferencia,
es que debe existir un bucle que se encargue de procesar todos los mensajes del sistema
operativo dirigidos a la aplicación. En este punto es donde, a diferencia del lenguaje C,
entra a operar la orientación a objetos mediante la encapsulación de este bucle de
mensajes y otras propiedades inherentes al mismo, en una clase que se encarga de todos
estos detalles. Esa clase se llama Application y es estática, lo que significa que no es
posible definir objetos a partir de ella.
La clase Application
La clase Application hace parte del espacio de nombres System.Windows.Forms. El
principal método que posee esta clase es Run, el cual se encarga de iniciar el bucle de
mensajes en la línea de ejecución que se encuentre actualmente.
El método Run está sobrecargado con tres versiones. Una de ellas se ejecuta sin
parámetros, la otra recibe un parámetro del tipo ApplicationContext, y una tercera
versión recibe un objeto del tipo Form, o lo que se conoce como formulario. La mayoría
de aplicaciones estándar de Windows se ejecutan bajo esta última versión del método
Run.
El formulario
El elemento principal y más representativo de una aplicación con interfaz gráfica es aquel
que se conoce con el nombre de ventana. Desde la visión del programador de C#, el objeto
que da origen a este elemento es el formulario.
La clase Form, que pertenece al espacio de nombres System.Windows.Forms, es quien
se encarga de definir todos los formularios que sean necesarios para la creación de las
ventanas que puede necesitar una aplicación con interfaz gráfica de usuario.
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
Generalmente, y en el contexto del entorno de desarrollo de .NET, a este tipo de
plicaciones se le denomina programas Windows Forms.
Form es una clase que encapsula todas las propiedades, métodos y eventos que se
necesitan para dar funcionalidad a una ventana. Pero esto no significa que el programador
tenga que limitarse a definir objetos con esta clase y a modificar sus propiedades, porque
también puede heredar de ella para crear clases que definan formularios de ventanas
totalmente personalizadas a sus intereses.
Para crear nuestro primer formulario basta con crear una instancia de la clase Forms,
poner su propiedad visible a true y utilizar el método Run de la clase Application.
Form ventana = new Form();
ventana.Text = "¡Hola ventana...!";
ventana.Visible = true;
Application.Run(ventana);
Controles En Windows se le llama control a cualquier elemento gráfico colocado sobre una ventana
y que permite realizar alguna tarea de interés para la aplicación. Ejemplos de controles
son las barras de desplazamiento, los menús, botones de comando, botones de opción (o
radio), casillas de verificación, campos de entrada de texto y cuadros de lista, entre otros.
Los controles son una forma de abstracción y encapsulamiento bastante elevado que le
permiten al programador estructurar y modular sus aplicaciones, despreocupándose de
los detalles relacionados con el manejo del teclado y el ratón.
Para .NET cualquier control es un objeto que puede crearse a partir de una clase, y su
manejo es igual al de cualquier otro objeto que el programador haya utilizado con
anterioridad. Con la ventaja que ya existe una amplia gama de clases que han sido
programadas, y hacen parte del Framework .NET, para tal fin. Aunque este tema se va a
describir con más detalle en posteriores capítulos, aquí se hace mención de tres clases que
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
permiten crear los controles más básicos de una aplicación: Button, para crear botones
de comando; TextBox, para crear campos de entrada de texto, y Label para crear las
llamadas etiquetas, que permiten mostrar cadenas de texto sobre la ventana.
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
Propiedades En lenguajes de programación como Java solemos (o solíamos) escribir los métodos de
acceso y mutación de los campos de la clase. La forma convencional consiste en
anteponer los prefijos get y set para referirse a los métodos de acceso y a los métodos de
mutación, respectivamente. Este mismo esquema de estructura de los tipos para los
miembros puede utilizarse en C#, sin embargo, este lenguaje provee un mecanismo más
natural de acceder y cambiar valores de los campos; me refiero a las propiedades.
Semánticamente las propiedades se analogan con los campos miembro de un tipo, sin
embargo, las propiedades permiten hacer validaciones sobre las asignaciones y
mantener la consistencia de los datos asignados a los campos miembro (o de instancia).
Las propiedades, además, a nivel sintáctico difieren notablemente debido a la forma de
su declaración y composición estructural:
Campo:
private string Nombre;
Propiedad:
private string Nombre
{
get;
set;
}
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
Nótese de la diferencia de la sintaxis requerida para construir cada uno de estos
miembros de instancia. Por un lado, el campo sólo requiere (elementalmente) de tres
elementos:
modificador de acceso + tipo de dato + identificador;
la propiedad por su lado, además de la sintaxis anterior requiere especificar un bloque de
código encerrado entre llaves de apertura ({) y cierre (}). En el bloque de construcción se
especifica la combinación de acceso y modificación a través de set y get.
Por otro parte, [1] si quisiéramos distinguir entre una propiedad y un cambo desde código
cliente no podríamos saberlo (bueno sí, pero si utilizamos un editor de código fuente
como el que incorpora Visual Studio IDE):
Construcciones de Acceso
Una propiedad está compuesta por los elementos de acceso: get y set.
get
A través de get podemos acceder al valor de la propiedad, en consecuencia del campo
asociado con esta propiedad. El valor de retorno corresponde con el tipo de la propiedad.
Cuando sólo especificamos esta construcción en el cuerpo de una propiedad, decimos que
la propiedad es de sólo lectura.
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
set
En otros lenguajes se le conoce como mutador, debido a que es la construcción de acceso
que modifica, cambia o muta el valor del campo asociado con la propiedad. Cuando sólo
se ha especificado set en el cuerpo de la propiedad, decimos que se trata de una propiedad
de sólo escritura. Adicionalmente, esta construcción de acceso tiene unavariable
implícita llamada value que corresonde con el valor a asignar a la propiedad.
Las construcciones de acceso se pueden combinar para crear propiedades de lectura y
escritura como ocurre en:
private string Nombre
{
get;
set;
}
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
Eventos Un evento consiste en una acción generada a partir de la interacción con una aplicación: clic
de mouse, pulsación de tecla o botón, selección de comando de un menú, arrastrar y soltar
elementos en pantalla, &c. Los eventos también puede generarse por la generación de la
actividad de un sistema información: por ejemplo en un sistema de cajeras automáticos
(ATM), una vez que un cliente de la entidad bancaria realiza una transacción, el sistema se
encarga de hacer un registro de la actividad para controlar y asegurar los valores de los clientes
de la entidad, igualmente, el mismo sistema puede enviar un mensaje de texto al móvil del
cliente con el registro (lugar, valor, fecha y hora) de la transacción recién efectuada. (En la
Figura 1 se puede apreciar pictóricamente todos los eventos anteriores.)
Concepto en C#
Básicamente, un evento en C# es un mecanismo que permite la generación de
notificaciones a un conjunto de clientes cuando algún suceso interesante transcurra sobre
un objeto. Sucesos a los que podríamos distinguir como interesantes (ejemplos):
a. Cambio del estado del objeto. b. Clic sobre un botón de envío de información de un formulario. c. Descarga de archivo completada. d. Notificación sobre con un globo de texto cuando la sincronización de un archivo se
ha completado. e. Porcentaje del avance de un proceso sobre una barra de progreso. f. Cambio del nombre del archivo afecta el texto de la barra de título de una
aplicación. Todos los anteriores, y muchos otros eventos son generados a partir de una clase publicadora y notificados a un conjunto de clases clientes (o subscriptores) que están interesados en la generación de esos cambios producidos por los eventos. En la programación de interfaces gráfica de usuario es común el uso de eventos. Los eventos se asocian con controles (componentes gráficos: botones, listas, cajas de comprobación, áreas de texto, agrupador de elementos, &c.). Cada vez que un usuario pulsa un botón, por ejemplo, se dispara un evento que genera una acción particular (guardar archivo, cerrar el programa, ir a la siguiente página, etc.).
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
Aparte de la utilidad anterior de los eventos, éstos también son usados para cualquier
escenario que requiera la notificación de cambios de estados de un objeto a un conjunto
de clientes interesados en conocer su estado y reaccionar frente a esos cambios.
Saber en qué consiste delegados nos permitirá avanzar más fácilmente en esta serie de
«Eventos en C#», debido a que un evento es un tipo de delegado especial (por especificarlo
de algún modo).
Más técnicamente, un evento es un mecanismo utilizado por una clase para exponer una
serie de delegados de métodos, los cuales son invocados una vez ocurra el evento asociado
a esa clase de objeto.
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
Ejercicio sobre controles básicos de Windows forms y
Eventos.
Ejercicio 1:
Algo fundamental es la validación de los datos con lo que trabaja nuestro proyecto, por
esta razón, el siguiente ejemplo se basa en validaciones en tiempo de ejecución en los
datos que se pueden insertar en las cajas de texto.
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
Como se puede observar en la primera caja de texto solo se podrán insertar letras y
espacios en blancos. Para trabajar con validaciones en tiempo de ejecución de debe
trabajar con el evento KeyPress que se ejecuta cuando el foco está en el TextBox y
se presiona un tecla.
Para permitir que una tecla que se presione se escriba en la caja de texto se debe hacer lo
siguiente:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsLetter(e.KeyChar) || char.IsSeparator(e.KeyChar))
{
e.Handled = false;
}
}
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
Ejercicio2:
En este ejercicio se almacenara la información básica de una persona en en array de
objetos, estos objetos van a ser de tipo Persona(), esta sera una clase que crearemos para
guardar nuestros datos.
Los datos que vamos a guardar será código, nombre, apellido, dirección, teléfono, correo
asi que dentro de la clase debemos tener variables privadas para guardar los datos.
class datos
{
private string codigo;
private string nombre;
…………………….
Ya que estos datos son privados solo pueden acceder a ellos dentro de la misma clase por
esa razón crearemos propiedades que nos permitirán sacar un datos o insertar un dato.
public string P_Codigo
{
get { return codigo; }
set { codigo = value; }
}
En este caso he creado una propiedad llamada P_Codigo que me permitirá tener acceso
al miembro privado. Esto proceso se hará para cada una de las variables privadas que
hemos creado.
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
Una vez que tengamos nuestra clase Persona() persona crearemos una interfaz para
guardar datos.
Requisitos:
1. Cuando se inicie la aplicación todas las cajas de textos y los botones Guardar y
Eliminar deben estar bloqueados, es decir, no se puede seleccionar o escribir en
ellas.
2. Cuando se le de click en el botton Nuevo:
a. Bloquear el botón nuevo.
b. Desbloquear el guardar.
c. Bloquear el botón editar.
d. Limpiar las cajas de texto.
e. Desbloquear las cajas de texto.
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
3. Al darle click en Editar:
a. Las cajas de texto no deven limpiarse para que los datos se puedan editar y
posteriormente guardarse.
b. Bloquear el botón editar
c. Bloquear el botón nuevo
d. Desbloquear el botón guardar
e. Desbloquear las cajas de texto para la edición.
4. Al darle click en el botton guardar:
Este botón servirá tanto paga guardar como actualizar por lo tanto se debe contar
con un mecanismo para saber si se quiere guardar o actualizar un registro.
a. Los datos se deben de guardar en el list.
b. Se deben bloquear las cajas de texto.
c. Se debe de mostrar en el grid todos los datos que hay en la lista.
d. Se debe cargar el primer registro en las cajas de texto.
5. Al darle click sobre la tabla
a. Se deben de cargar el registro que se seleccionó en las cajas de texto, esto
se puede hacer obteniendo el índice de la fila de la tabla que se ha
seleccionado, y cargar ese registro en las cajas de texto.
Para guardar los datos utilizaremos una lista de tipo estudiante como la siguiente
List<Estudiante> datos;
datos = new List<Estudiante>();
Universidad Nacional Autónoma de Nicaragua UNAN-León
Departamento de Computación
Cuando seleccionemos cualquier columna de cualquier registro de los que se nos
muestran en el datagrid, estos datos también se deven mostrar en las cajas de textos que
están bloqueadas.