Unidad II Creación de controles especiales 2.1 CREACIÓN DE CONTROLES ESPECIALES

Documentos relacionados
Tema: Introducción al IDE de Microsoft Visual C#.

UNIDAD 2- LA CREACIÓN DE TABLAS EN ACCESS 2010

Manual de Access. RGA Training & Solutions

Ejecuta el modo XP sin virtualización de hardware

índice MÓDULO 1: Introducción a Visual Basic 6.0 MÓDULO 2: Fundamentos de programación TEMA 1. Introducción a Visual Basic 6.0

PRÁCTICA 12: Programación de Formularios

Curso de formación de Microsoft Office Access 2007

1

Tablas en vista hoja de datos

Estilos y temas. Contenido TECNOLOGÍA WORD

NATIONAL SOFT HOTELES GUÍA DE CONFIGURACIÓN DEL FORMATO DE FACTURAS

Práctica de laboratorio: Utilidades de la línea Ejecutar en Windows XP

5.3 CREAR FORMULARIOS

MINISTERIO DE EDUCACIÓN PÚBLICA IPEC Santa Bárbara de Heredia Software de Aplicación Accesorio WordPad

MICROSOFT POWERPOINT 2010

Tema: Repaso sobre el uso del IDE de Microsoft Visual C#.

icloud: Solución de calendarios duplicados después de configurar la aplicación de calendarios para Calendario icloud

BANCO DE REACTIVOS DE OPCIÓN MÚLTIPLE WINDOWS VISTA

Manual de usuario MetaTrader 4 TraderNovo:

Microsoft. desde Access 2003

Introducción: La tarea que se debe llevar a cabo consiste en crear dos macros y guardarlas en una

ModelBuilder - Tutorial de ejecución de herramientas

Profesor(a): Ing. Miriam Cerón Brito

En esta lección creará un dibujo de las piezas y ensamblaje de las Lecciones 1 y 2 en múltiples hojas. Esta lección incluye:

Manual para el Dibujo de Flujograma mediante Microsoft Visio TECNOLOGÍAS DE LA ADMINISTRACIÓN PÚBLICA MATERIAL DE CÁTEDRA

Manual de Usuario para Proponentes

Pasos para cambiar la orientación de la página

AUTOMATIZACIÓN DE TAREAS REPETITIVAS MEDIANTE GRABACIÓN DE MACROS

Figura 41: Ejemplo de una carta para combinar correspondencia

INGENIERÍA TELEINFORMÁTICA

Unidad 2. Elementos de Word2007 (I)

Ejercicio corto. Ejercicio corto. Ejercicio corto. Lección 1: Introducción a Word. Lección 2: Modificaciones de documentos

PROCEDIMIENTO PARA GENERAR LOS REQUERIMIENTOS DE SELLOS DIGITALES

Figura 61: Barras de Herramientas para la edición de Formularios

Fundamentos de Word. Identificar los elementos de la interfaz de usuario que puede usar para realizar las tareas básicas.

3.2. MANEJO DEL ENTORNO

INFORMÁTICA Y COMUNICACIONES

Cómo utilizar Conference Manager para Microsoft Outlook

Cómo solucionar problemas que se producen al iniciar o utilizar Word

Personalizar el Escritorio del Windows 7

Práctica de laboratorio: Utilización de la herramienta Restaurar sistema en Windows Vista

Modelos Comprimidos. Modelo de Bloque 3D Standard

Abrir y explorar plantillas de Word

INSTITUTO ELECTORAL DEL ESTADO DE MÉXICO SECRETARÍA EJECUTIVA UNIDAD DE INFORMÁTICA Y ESTADÍSTICA

Microsoft Windows Seven. Windows Seven. Elementos de la pantalla principal Iconos del escritorio o Equipo o Papelera de Reciclaje Barra de tareas

PHOTOSHOP Concepto.- Espacio de trabajo.-

Operaciones básicas con hojas de cálculo

Tutoriales y Guías de uso con Orientaciones Pedagógicas Entorno Virtual de Aprendizaje Plataforma Blackboard WIKIS

Universidad José Carlos Mariátegui

Para aplicar un color de trazo a una forma, puede seguir cualquiera de los procedimientos siguientes:

Tutorial: Creación de una película interactiva

Fila: Es un conjunto de varias celdas dispuestas en sentido horizontal.

WorkManager E.D. Manual guía de usuario Diseñador de formularios

Problemática con la actualización de Java 7 update 45

Firma y validación de ficheros PDF con Acrobat 8

Microsoft Project 2013

COLEGIO PABLO DE TARSO IED CONSTRUCCION DE PROYECTOS DE VIDA PRODUCTIVOS DREAMWEAVER UNO- PRÁCTICAS DOC RAUL MONROY PAMPLONA

Quieres diseñar una página web y no sabes por dónde empezar? Puedes decantarte por utilizar Visual Web Developer.

Qué es un Procesador de textos? Iniciar Word. Microsoft Word Microsoft Office 2010

Tablas: Modificar o cambiar el tipo de datos de un campo

Contenido. Introducción. prerrequisitos. Requisitos. Componentes Utilizados

Microsoft PowerPoint 2013 (Completo)

Creación de Formularios y Consultas

Administración de dispositivos móviles

HP Color LaserJet serie CM3530 MFP Tareas de impresión

MICROSOFT ACCESS 2007 (COMPLETO)

UTILIZACIÓN DE PLANTILLAS Y ASISTENTES QUE INCORPORA LA APLICACIÓN Y CREACIÓN DE PLANTILLAS PROPIAS

FUSIÓN DE DOCUMENTOS PROCEDENTES DE OTRAS APLICACIONES DEL PAQUETE OFIMÁTICO UTILIZANDO LA INSERCIÓN DE OBJETOS DEL MENÚ INSERTAR

Área Académica: Licenciatura en Derecho. Profesor: Lic. Virginia Argüelles Pascual

Packet Tracer: Navegación de IOS

Sesión No. 10. Contextualización INFORMÁTICA 1. Nombre: Gestor de Base de Datos (Access)

Gestión de bases de datos de mysql desde Dreamweaver

Tablas. Contenido TECNOLOGÍA WORD

Tutorial de NetCDF. Copyright Esri All rights reserved.

Manual de GeoConcept 6 II Parte

Práctica de laboratorio Conexión y configuración de hosts

PERIODO 3 HOJA DE CÁLCULO CONCEPTOS INTERMEDIOS OPERACIONES CON CELDAS, FILAS Y COLUMNAS EN EXCEL SELECCIONAR COPIAR MOVER BORRAR

Actividad 1.1 Instalación típica de Windows 2000 Server

Figura 17 Barra de iconos

Tutorial de Moodle. Chat

Manual de Instrucciones para el uso con un ordenador

Finalmente, aprenderá a interceptar y a manejar muchos de los eventos comunes que tienen los componentes y los formularios de Windows Form.

Microsoft Visual Studio está basado en.net framework. Definiciones de.net Framework:

Ordenador local + Servidor Remoto

Combinación de correspondencia en Microsoft Office Word 2003

Introducción a Windows 98

Crear gráficos en Excel Un gráfico es la representación gráfica de los datos de una hoja de cálculo y facilita su interpretación.

Manual del Usuario de Microsoft Access Formularios - Página 1. Tema V: Formularios. V.1. Creación de un Formulario

En qué consiste esta Herramienta?

Seleccione el dispositivo de la lista Seleccionar impresora.

Manual de Visual Basic Principiante Autor: Jorge Alvarez

INTRODUCCIÓN AL POWER POINT 2007 POWER POINT Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

CURSO VISUAL BASIC BASICO MATERIAL DE APOYO REALIZACION TRABAJO FINAL

ModelBuilder - Tutorial de creación de herramientas

QQUANTUM COMPUTACION

SISTEMAS DE INSTRUMENTACIÓN ELECTRÓNICA AVANZADA. Ejercicios de Introducción a LabVIEW

EL ENTORNO DEL EDITOR

Tramite de Certificado de Sello Digital

Asistente de configuración Grabador Digital de Vídeo

Actividad 3.1 Configuración de un servidor DHCP en Windows 2000

Transcripción:

2.1 CREACIÓN DE CONTROLES ESPECIALES Crear un control compuesto con Visual C# Los controles compuestos proporcionan un medio para crear y reutilizar interfaces gráficas personalizadas. Un control compuesto es esencialmente un componente con una representación visual. Como tal, puede constar de uno o más controles de formularios Windows Forms, componentes o bloques de código, que pueden extender su funcionalidad mediante la validación de la entrada del usuario, la modificación de las propiedades de presentación o la ejecución de otras tareas requeridas por su autor. Los controles compuestos se pueden colocar en formularios Windows Forms del mismo modo que otros controles. En la primera parte del tutorial, creará un control de usuario sencillo denominado ctlclock. En la segunda parte del tutorial, ampliará la funcionalidad de ctlclock a través de herencia. Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configuración activa o la edición. Para cambiar la configuración, elija la opción Importar y exportar configuraciones en el menú Herramientas.. Crear el proyecto Cuando cree un nuevo proyecto, debe establecer el espacio de nombres de la raíz, el nombre de ensamblado y el de proyecto, además de asegurarse de que el componente predeterminado estará en el espacio de nombres correcto. Para crear la biblioteca de controles ctlclocklib y el control ctlclock 1. En el menú Archivo, elija Nuevo y, a continuación, haga clic en Proyecto para abrir el cuadro de diálogo Nuevo proyecto. 2. En la lista de proyectos de Visual C#, seleccione la plantilla de proyectos Biblioteca de controles de Windows, escriba ctlclocklib en el cuadro Nombre y, a continuación, haga clic en Aceptar. El nombre del proyecto, ctlclocklib, se asigna también de forma predeterminada al espacio de nombres de la raíz. El espacio de nombres de la raíz se utiliza para calificar los nombres de los componentes del ensamblado. Por ejemplo, si dos ensamblados proporcionan componentes denominados ctlclock, puede especificar el componente ctlclock mediante ctlclocklib.ctlclock. 3. En el Explorador de soluciones, haga clic con el botón secundario del mouse (ratón) en UserControl1.jsl y haga clic en Cambiar nombre. Cambie el nombre de archivo a ctlclock.cs. Haga clic en el botón Sí cuando se le pregunte si desea cambiar el nombre de todas las referencias al elemento de código "UserControl1". De forma predeterminada, un control compuesto hereda de la clase UserControl proporcionada por el sistema. La clase UserControl proporciona la funcionalidad necesaria para todos los controles de usuario e implementa métodos y propiedades estándar. 4. En el menú Archivo, elija Guardar todo para guardar el proyecto. Lic.Cesar Espinoza Jiménez 1

Agregar controles y componentes de Windows al control compuesto Una parte esencial del control compuesto es una interfaz visual. Esta interfaz visual se implementa mediante la adición de uno o más controles de Windows a la superficie del diseñador. En la demostración siguiente, incorporará controles de Windows al control compuesto y escribirá código para implementar funcionalidad. Para agregar un control Label y un componente Timer al control compuesto 1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en ctlclock.cs y haga clic en Diseñador de vistas. 2. En el Cuadro de herramientas, expanda el nodo Controles comunes y, a continuación, haga doble clic en Label. Un control Label denominado label1 se agrega al control en la superficie del diseñador. 3. En el diseñador, haga clic en label1. En la ventana Propiedades, establezca las propiedades siguientes: Propiedad Nombre Texto TextAlign Cambie a lbldisplay (Espacio en blanco) MiddleCenter Font.Size 14 4. En el Cuadro de herramientas, expanda el nodo Componentes y, a continuación, haga doble clic en el componente Timer. Dado que Timer es un componente, no tiene representación visual en tiempo de ejecución. Por tanto, no aparece con los controles en la superficie del diseñador, sino en el Diseñador de componentes (una bandeja situada en la parte inferior de la superficie del diseñador). 5. En el Diseñador de componentes, haga clic en timer1 y, a continuación, establezca la propiedad Interval en 1000 y la propiedad Enabled en true. La propiedad Interval controla la frecuencia con la que se incrementa el valor del componente Timer. Cada vez que timer1 marca un paso, ejecuta el código del evento timer1_tick. El intervalo representa el número de milisegundos entre paso y paso. 6. En el Diseñador de componentes, haga doble clic en Timer1 para ir al evento timer1_tick de ctlclock. 7. Modifique el código de modo que se asemeje al siguiente ejemplo: Asegúrese de cambiar el modificador de acceso de private a protected. protected void timer1_tick(object sender, System.EventArgs e) // Causes the label to display the current time. lbldisplay.text = DateTime.Now.ToLongTimeString(); Este código hace que se muestre la hora actual en lbldisplay. Dado que el intervalo de timer1 se estableció en 1000, este evento se activará cada mil milisegundos, por lo que la hora se actualizará cada segundo. Lic.Cesar Espinoza Jiménez 2

8. Modifique el método para que pueda reemplazarse, mediante la palabra clave virtual. Para obtener más información, vea la sección siguiente "Heredar de un control de usuario". protected virtual void timer1_tick(object sender, System.EventArgs e) 9. En el menú Archivo, elija Guardar todo para guardar el proyecto. Agregar propiedades al control compuesto El control de reloj encapsula ahora un control Label y un componente Timer, cada uno con su propio conjunto de propiedades inherentes. Aunque las propiedades individuales de estos controles no estarán disponibles para los futuros usuarios del control, puede crear y exponer propiedades personalizadas escribiendo los bloques de código adecuados. En el procedimiento siguiente, agregará al control propiedades que permiten que el usuario cambie el color del fondo y del texto. Para agregar una propiedad al control compuesto 1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en ctlclock.cs y haga clic en Ver código. Se abrirá el Editor de código para el control. 2. Busque la instrucción public partial class ctlclock. Bajo la llave de apertura (), escriba el código siguiente. private Color colfcolor; private Color colbcolor; Estas instrucciones crean las variables privadas que se utilizarán para almacenar los valores de las propiedades que va a crear. 3. Escriba el código siguiente bajo las declaraciones de variables del paso 2: // Declares the name and type of the property. public Color ClockBackColor // Retrieves the value of the private variable colbcolor. get return colbcolor; // Stores the selected value in the private variable colbcolor, and // updates the background color of the label control lbldisplay. set colbcolor = value; lbldisplay.backcolor = colbcolor; // Provides a similar set of instructions for the foreground color. public Color ClockForeColor get return colfcolor; set colfcolor = value; Lic.Cesar Espinoza Jiménez 3

lbldisplay.forecolor = colfcolor; El código anterior crea dos propiedades personalizadas, ClockForeColor y ClockBackColor, disponibles para posteriores usuarios de este control. Las instrucciones gety set permiten el almacenamiento y la recuperación del valor de la propiedad; además, proporcionan el código necesario para implementar la funcionalidad adecuada para la propiedad. 4. En el menú Archivo, elija Guardar todo para guardar el proyecto. Probar el control Los controles no son aplicaciones independientes; deben alojarse en un contenedor. Pruebe el comportamiento del control en tiempo de ejecución y pruebe sus propiedades con el UserControl Test Container. Para probar el control 1. Presione F5 para generar el proyecto y ejecutar el control en el UserControl Test Container. 2. En la cuadrícula de propiedad del contenedor de prueba, busque la propiedad ClockBackColor y, a continuación, seleccione la propiedad para mostrar la paleta de colores. 3. Haga doble clic en un color para elegirlo. El color de fondo del control cambiará al color seleccionado. 4. Utilice una secuencia de eventos similar para comprobar que la propiedad ClockForeColor funciona como se esperaba. En esta sección y en las secciones anteriores, vio cómo se pueden combinar componentes y controles de Windows con código y empaquetamiento para ofrecer funcionalidad personalizada en forma de control de usuario. Aprendió a exponer propiedades en el control compuesto, así como a probar el control una vez terminado. En la siguiente sección, aprenderá a construir un control de usuario heredado utilizando ctlclock como base. Heredar de un control compuesto En las secciones anteriores, aprendió a combinar controles de Windows, componentes y código en controles de usuario reutilizables. Ahora puede utilizar el control compuesto como base a partir de la cual se generarán otros controles. El proceso de derivación de una clase a partir de una clase base se denomina herencia. En esta sección, creará un control de usuario denominado ctlalarmclock. Este control se derivará de su control principal, ctlclock. Aprenderá a ampliar la funcionalidad de ctlclock reemplazando los métodos principales y agregando métodos y propiedades nuevos. El primer paso para crear un control heredado es derivarlo de su control primario. Esta acción crea un nuevo control que tiene todas las propiedades, métodos y características gráficas del control primario, pero que también actúa como base para la adición de funcionalidad nueva o modificada. Para crear el control heredado 1. En el Explorador de soluciones, haga clic en el proyecto con el botón secundario del mouse (ratón), elija Agregar y haga clic en Control de usuario. Se abrirá el cuadro de diálogo Agregar nuevo elemento. 2. Seleccione la plantilla Control de usuario heredado. 3. En el cuadro Nombre, escriba ctlalarmclock.jsl y haga clic en Agregar. Aparece el cuadro de diálogo Selector de herencia. 4. En Nombre de componente, haga doble clic en ctlclock. 5. En el Explorador de soluciones, examine los proyectos actuales. Lic.Cesar Espinoza Jiménez 4

Se ha agregado un archivo denominado que ctlalarmclock.cs al proyecto actual. Agregar propiedades de alarma Las propiedades se agregan a un control heredado del mismo modo que se agregan a un control compuesto. Ahora utilizará la sintaxis de declaración de propiedades para agregar dos propiedades al control: AlarmTime, que almacenará el valor de fecha y hora en que se activará la alarma y AlarmSet, que indica si está establecida o no la alarma. Para agregar propiedades al control compuesto 1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en ctlalarmclock y, a continuación, haga clic en Ver código. 2. Busque la instrucción public class. Observe que el control hereda de ctlclocklib.ctlclock. Bajo la llave de apertura (), escriba el código siguiente. private DateTime dtealarmtime; private bool blnalarmset; // These properties will be declared as public to allow future // developers to access them. public DateTime AlarmTime get return dtealarmtime; set dtealarmtime = value; public bool AlarmSet get return blnalarmset; set blnalarmset = value; Agregar a la interfaz gráfica del control El control heredado tiene una interfaz visual que es idéntica a la del control del que se hereda. Posee los mismos controles constituyentes que su control primario, pero las propiedades de los controles constituyentes no estarán disponibles a menos que se expongan de manera específica. Puede agregar a la interfaz gráfica de un control compuesto heredado del mismo modo que agregaría a cualquier control compuesto. Para continuar agregando a la interfaz visual de su reloj de alarma, agregará un control Label que parpadeará cuando esté sonando la alarma. Lic.Cesar Espinoza Jiménez 5

Para agregar el control Label 1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en ctlalarmclock y, a continuación, haga clic en Ver diseñador. Aparecerá el diseñador de ctlalarmclock en la ventana principal. 2. Haga clic en la zona de presentación del control y observe la ventana Propiedades. Observe que, aunque se muestran todas las propiedades, están atenuadas. Esto indica que estas propiedades son nativas de lbldisplay y no se pueden modificar ni se puede tener acceso a ellas en la ventana Propiedades. De manera predeterminada, los controles contenidos en un control compuesto son privados (private) y no se puede tener acceso a sus propiedades de ningún modo. Si desea que los futuros usuarios del control de usuario tengan acceso a los controles internos, declárelos como public o protected. Esto le permitirá establecer y modificar las propiedades de los controles contenidos en el control compuesto, mediante el código adecuado. 3. Agregue el control Label al control compuesto. 4. Con el mouse (ratón), mueva el control Label justo debajo del cuadro de vista. En la ventana Propiedades, establezca las propiedades siguientes: Propiedad Nombre Texto TextAlign Visible Parámetro lblalarm Alarm! MiddleCenter false Agregar la funcionalidad de alarma En los procedimientos anteriores, agregó propiedades y un control que habilitará la funcionalidad de alarma en el control compuesto. En este procedimiento, agregará código para comparar la hora actual con la hora de la alarma y, si coinciden, iniciará la alarma. Al anular el método timer1_tick de ctlclock y agregar código adicional en él, ampliará la capacidad de ctlalarmclock mientras conserva toda la funcionalidad inherente de ctlclock. Para reemplazar el método timer1_tick de ctlclock 1. En el Editor de código, busque la instrucción private bool blnalarmset;. Justo después, agregue la siguiente instrucción. private bool blncolorticker; 2. En el Editor de código busque la llave de cierre () al final de la clase. Inmediatamente antes de la llave, agregue el código siguiente: Lic.Cesar Espinoza Jiménez 6

protected override void timer1_tick(object sender, System.EventArgs e) // Calls the Timer1_Tick method of ctlclock. base.timer1_tick(sender, e); // Checks to see if the alarm is set. if (AlarmSet == false) return; else // If the date, hour, and minute of the alarm time are the same as // the current time, flash an alarm. if (AlarmTime.Date == DateTime.Now.Date && AlarmTime.Hour == DateTime.Now.Hour && AlarmTime.Minute == DateTime.Now.Minute) // Sets lblalarmvisible to true, and changes the background color based on // the value of blncolorticker. The background color of the label // will flash once per tick of the clock. lblalarm.visible = true; if (blncolorticker == false) lblalarm.backcolor = Color.Red; blncolorticker = true; else lblalarm.backcolor = Color.Blue; blncolorticker = false; else // Once the alarm has sounded for a minute, the label is made // invisible again. lblalarm.visible = false; Al agregar este código se realizan varias tareas. La instrucción override indica al control que utilice este método en lugar del método heredado del control base. Cuando se llama a este método, éste llama al que reemplaza al invocar la instrucción base.timer1_tick; de este modo, se asegura que toda la funcionalidad incorporada en el control original se reproduzca en este control. A continuación, ejecuta código adicional para incorporar la funcionalidad de la alarma. Cuando se active la alarma, aparecerá un control etiqueta intermitente. El control de reloj de alarma está casi completo. Lo único que queda es implementar un medio para desactivarlo. Para ello, agregará el código al método lblalarm_click. Para implementar el método de apagado 1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en ctlclock.cs y haga clic en Ver diseñador. Se abrirá el diseñador. 2. Agregue un botón al control. Establezca las propiedades del botón de la manera siguiente: Lic.Cesar Espinoza Jiménez 7

Propiedad Nombre Texto Valor btnalarmoff Disable Alarm 3. En el diseñador, haga doble clic en btnalarmoff. Se abrirá el Editor de código en la línea private void btnalarmoff_click. 4. Modifique este método de forma que se asemeje al código siguiente. private void btnalarmoff_click(object sender, System.EventArgs e) // Turns off the alarm. AlarmSet = false; // Hides the flashing label. lblalarm.visible = false; 5. En el menú Archivo, elija Guardar todo para guardar el proyecto. Utilizar el control heredado en un formulario Puede probar el control heredado de la misma forma que probó el control de la clase base, ctlclock: presione F5 para generar el proyecto y ejecute el control en UserControl Test Container. Para colocar el control para su uso, tendrá que alojarlo en un formulario. Como ocurre con los controles compuestos estándar, los controles compuestos heredados no son independientes y deben alojarse en un formulario o en otro contenedor. Puesto que ctlalarmclock ofrece una funcionalidad más profunda, será necesario código adicional para probarlo. En esta sección, escribirá un programa sencillo para probar la funcionalidad de ctlalarmclock. Escribirá código para definir y mostrar la propiedad AlarmTime de ctlalarmclock y probar sus funciones heredadas. Para generar y agregar el control a un formulario de prueba 1. En el Explorador de soluciones, haga clic con el botón secundario del mouse (ratón) en ctlclocklib y haga clic en Cambiar nombre. 2. Agregue un nuevo proyecto de Aplicación para Windows a la solución y denomínelo Test. 3. En el Explorador de soluciones, haga clic con el botón secundario del mouse (ratón) en el nodo Referencias del proyecto de prueba. Haga clic en Agregar referencia para mostrar el cuadro de diálogo Agregar referencia. Haga clic en la ficha Proyectos. El proyecto ctlclocklib aparecerá en la lista Nombre de proyecto. Haga doble clic en el proyecto para agregar la referencia al proyecto de prueba. 4. En el Explorador de soluciones, haga clic con el botón secundario del mouse (ratón) en Test y haga clic en Generar. 5. En el Cuadro de herramientas, expanda el nodo Componentes de ctlclocklib. 6. Haga doble clic en ctlalarmclock para agregar una copia de ctlalarmclock al formulario. 7. En el Cuadro de herramientas, busque y haga doble clic en DateTimePicker para agregar un control DateTimePicker al formulario; a continuación, haga doble clic en Label para agregar un control Label. 8. Utilice el mouse (ratón) para colocar los controles en un lugar apropiado del formulario. 9. Establezca las propiedades de estos controles de la manera siguiente. Lic.Cesar Espinoza Jiménez 8

Control Propiedad Valor label1 Texto (Espacio en blanco) Nombre lbltest datetimepicker1 Nombre dtptest Formato Time 10. En el diseñador, haga doble clic en dtptest. Se abrirá el Editor de código en private void dtptest_valuechanged. 11. Modifique el código de modo que se asemeje a lo siguiente. private void dtptest_valuechanged(object sender, System.EventArgs e) ctlalarmclock1.alarmtime = dtptest.value; ctlalarmclock1.alarmset = true; lbltest.text = "Alarm Time is " + ctlalarmclock1.alarmtime.toshorttimestring(); 12. En el Explorador de soluciones, haga clic con el botón secundario del mouse (ratón) en Test y, a continuación, en Establecer como proyecto de inicio. 13. En el menú Depurar, haga clic en Iniciar depuración. Se iniciará el programa de prueba. Observe que la hora actual se actualiza en el control ctlalarmclock y que la hora de inicio se muestra en el control DateTimePicker. 14. Haga clic en DateTimePicker donde se muestran los minutos. 15. Con el uso del teclado, defina un valor para los minutos que sea un minuto más que la hora actual que muestra ctlalarmclock. La hora de la configuración de la alarma se muestra en lbltest. Espere a que la hora que se muestra alcance la hora establecida para la alarma. Cuando la hora mostrada coincida con la hora a la que está puesta la alarma, se iniciará lblalarm. 16. Para desactivar la alarma, haga clic en btnalarmoff. Ahora puede reiniciar la alarma. Este tutorial trataba varios conceptos clave. Aprendió a crear un control compuesto mediante la combinación de controles y componentes en un contenedor de control compuesto. Aprendió a agregar propiedades al control y a escribir código para implementar funcionalidades personalizadas. En la última sección aprendió a extender la funcionalidad de un control compuesto mediante herencia, y a modificar la funcionalidad de los métodos alojados reemplazando estos últimos. Heredar de un control de formularios Windows Forms con Visual C# Con Visual C# 2005, puede crear controles personalizados eficaces mediante la herencia. A través de la herencia, podrá crear controles que retengan toda la funcionalidad heredada de los controles estándar de formularios Windows Forms y que incorporen también funcionalidad personalizada. En este tutorial, creará un control heredado sencillo denominado ValueButton. Este botón heredará la funcionalidad del botón estándar del control Button de los formularios Windows Forms y expondrá una propiedad personalizada denominada ButtonValue. Lic.Cesar Espinoza Jiménez 9

Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configuración activa o la edición. Para cambiar la configuración, elija la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio. Crear el proyecto Cuando cree un nuevo proyecto, debe especificar su nombre para establecer el espacio de nombres de la raíz, el nombre de ensamblado y el de proyecto, además de asegurarse de que el componente predeterminado estará en el espacio de nombres correcto. Para crear la biblioteca de controles ValueButtonLib y el control ValueButton 1. En el menú Archivo, elija Nuevo y, a continuación, haga clic en Proyecto para abrir el cuadro de diálogo Nuevo proyecto. 2. Seleccione la plantilla de proyecto Biblioteca de controles de Windows en la lista de proyectos de Visual C# y escriba ValueButtonLib en el cuadro Nombre. El nombre del proyecto, ValueButtonLib, se asigna también de forma predeterminada al espacio de nombres de la raíz. El espacio de nombres de la raíz se utiliza para calificar los nombres de los componentes del ensamblado. Por ejemplo, si dos ensamblados proporcionan componentes denominados ValueButton, puede especificar el componente ValueButton utilizando ValueButtonLib.ValueButton. 3. En el Explorador de soluciones, haga clic con el botón secundario del mouse (ratón) en UserControl1.cs y, a continuación, elija Cambiar nombre en el menú contextual. Cambie el nombre del archivo a ValueButton.cs. Haga clic en el botón Sí cuando se le pregunte si desea cambiar el nombre de todas las referencias al elemento de código 'UserControl1'. 4. En el Explorador de soluciones, haga clic con el botón secundario del mouse en ValueButton.cs, y seleccione Ver código. 5. Busque la línea de instrucción class, public partial class ValueButton, y cambie el tipo desde el que se hereda el control UserControl a Button. Esta opción permite al control heredado heredar toda la funcionalidad del control Button. 6. En el Explorador de soluciones, abra el nodo ValueButton.cs para mostrar el archivo de código generado por el diseñador, ValueButton.Designer.cs. Abra este archivo en el Editor de código. 7. Busque el método InitializeComponent y quite la línea que asigna la propiedad AutoScaleMode. Esta propiedad no existe en el control Button. 8. En el menú Archivo, elija Guardar todo para guardar el proyecto. Ya no hay ningún diseñador visual disponible. Dado que el control Button realiza su propia presentación, no podrá modificar su apariencia en el diseñador. Su representación visual será exactamente la misma que la de la clase desde la que hereda (es decir, Button) a menos que se modifique en el código. Todavía puede agregar componentes, que no tengan ningún elemento de la interfaz de usuario, a la superficie de diseño. Lic.Cesar Espinoza Jiménez 10

Agregar una propiedad al control heredado Uno de los usos posibles de los controles heredados de formularios Windows Forms es la creación de controles idénticos en la apariencia y en el funcionamiento a los controles estándar de formularios Windows Forms, pero que expongan propiedades personalizadas. En esta sección, agregará al control una propiedad denominada ButtonValue. Para agregar la propiedad Value 1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en ValueButton.cs y, a continuación, haga clic en Ver código en el menú contextual. 2. Busque la instrucción class. Inmediatamente después de, escriba el siguiente código: // Creates the private variable that will store the value of your // property. private int varvalue; // Declares the property. public int ButtonValue // Sets the method for retrieving the value of your property. get return varvalue; // Sets the method for setting the value of your property. set varvalue = value; Este código establece los métodos mediante los cuales se almacena y se recupera la propiedad ButtonValue. La instrucción get establece el valor devuelto como el valor almacenado en la variable privada varvalue, y la instrucción set establece el valor de la variable privada mediante el uso de la palabra clave value. 3. En el menú Archivo, elija Guardar todo para guardar el proyecto. Probar el control Los controles no son proyectos independientes; deben alojarse en un contenedor. Para probar el control, debe proporcionar un proyecto de prueba en el que ejecutarlo. También debe hacer que el control sea accesible para el proyecto de prueba generándolo (compilándolo). En esta sección, generará el control y lo probará en un formulario Windows Forms. Para generar el control En el menú Generar, haga clic en Generar solución. La generación debe ser correcta, sin errores ni advertencias del compilador. Para crear un proyecto de prueba 1. En el menú Archivo, elija Agregar y, a continuación, haga clic en Nuevo proyecto para abrir el cuadro de diálogo Agregar nuevo proyecto. 2. Seleccione el nodo Windows, bajo el nodo Visual C#, y haga clic en Aplicación para Windows. 3. En el cuadro Nombre, escriba Test. Lic.Cesar Espinoza Jiménez 11

4. En el Explorador de soluciones, haga clic con el botón secundario del mouse (ratón) en el nodo References del proyecto de prueba y, a continuación, seleccione Agregar referencia en el menú contextual para mostrar el cuadro de diálogo Agregar referencia. 5. Haga clic en la ficha Proyectos. El proyecto ValueButtonLib aparecerá en la lista Nombre de proyecto. Haga doble clic en el proyecto para agregar la referencia al proyecto de prueba. 6. En el Explorador de soluciones, haga clic con el botón secundario del mouse en Test y seleccione Generar. Para agregar el control al formulario 1. En el Explorador de soluciones, haga clic con el botón secundario en Form1.cs y elija Diseñador de vistas en el menú contextual. 2. En el Cuadro de herramientas, haga clic en Componentes de ValueButtonLib. Haga doble clic en ValueButton. Aparecerá un control ValueButton en el formulario. 3. Haga clic con el botón secundario en ValueButton y seleccione Propiedades en el menú contextual. 4. En la ventana Propiedades, examine las propiedades de este control. Observe que son idénticas a las propiedades expuestas por un botón estándar, excepto en que hay una propiedad adicional, ButtonValue. 5. Establezca la propiedad ButtonValue en 5. 6. En la ficha Todos los formularios Windows Forms del Cuadro de herramientas, haga doble clic en Etiqueta para agregar un control de Label al formulario. 7. Coloque de nuevo la etiqueta en el centro del formulario. 8. Haga doble clic en valuebutton1 Se abrirá el Editor de código en el evento valuebutton1_click. 9. Escriba la siguiente línea de código. label1.text = valuebutton1.buttonvalue.tostring(); 10. En el Explorador de soluciones, haga clic con el botón secundario del mouse en Test y elija Establecer como proyecto de inicio en el menú contextual. 11. En el menú Depurar, elija Iniciar depuración. Aparece Form1. 12. Haga clic en valuebutton1. Se muestra el número '5' en label1, que muestra que la propiedad ButtonValue del control heredado se ha pasado a label1 mediante el método valuebutton1_click. Así, el control ValueButton hereda toda la funcionalidad del botón estándar de formularios Windows Forms, pero expone una propiedad adicional, personalizada. Lic.Cesar Espinoza Jiménez 12