You are on page 1of 12

Unidad II – Creación de controles especiales

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.
Nota
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".
Nota
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

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

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

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

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

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

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

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

En el menú Depurar. Se iniciará el programa de prueba. Aprendió a agregar propiedades al control y a escribir código para implementar funcionalidades personalizadas. A través de la herencia. Con el uso del teclado.Cesar Espinoza Jiménez 9 . se iniciará lblAlarm. 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. En este tutorial. En el Explorador de soluciones. creará un control heredado sencillo denominado ValueButton. Haga clic en DateTimePicker donde se muestran los minutos. La hora de la configuración de la alarma se muestra en lblTest. System. } 12. 14.AlarmSet = true. haga doble clic en dtpTest. Para desactivar la alarma. defina un valor para los minutos que sea un minuto más que la hora actual que muestra ctlAlarmClock. Se abrirá el Editor de código en private void dtpTest_ValueChanged.Unidad II – Creación de controles especiales Control Propiedad Valor label1 Texto (Espacio en blanco) Nombre lblTest Nombre dtpTest Formato Time dateTimePicker1 10. haga clic en btnAlarmOff. Modifique el código de modo que se asemeje a lo siguiente. y a modificar la funcionalidad de los métodos alojados reemplazando estos últimos.Text = "Alarm Time is " + ctlAlarmClock1. En el diseñador.EventArgs e) { ctlAlarmClock1. Aprendió a crear un control compuesto mediante la combinación de controles y componentes en un contenedor de control compuesto. Lic. Espere a que la hora que se muestra alcance la hora establecida para la alarma. lblTest. haga clic en Iniciar depuración. Cuando la hora mostrada coincida con la hora a la que está puesta la alarma. puede crear controles personalizados eficaces mediante la herencia.Value. Observe que la hora actual se actualiza en el control ctlAlarmClock y que la hora de inicio se muestra en el control DateTimePicker. haga clic con el botón secundario del mouse (ratón) en Test y.ToShortTimeString(). private void dtpTest_ValueChanged(object sender. 13. 16. En la última sección aprendió a extender la funcionalidad de un control compuesto mediante herencia. 11.AlarmTime. en Establecer como proyecto de inicio. ctlAlarmClock1.AlarmTime = dtpTest. Heredar de un control de formularios Windows Forms con Visual C# Con Visual C# 2005. 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. Ahora puede reiniciar la alarma. Este tutorial trataba varios conceptos clave. 15. a continuación.

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

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

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