Tutorial: heredar de un control de Windows Forms con C#Walkthrough: Inherit from a Windows Forms Control with C#

Con Visual C#, puede crear controles personalizados eficaces a través de la herencia.With Visual C#, you can create powerful custom controls through inheritance. A través de la herencia puede crear controles que conserven toda la funcionalidad inherente de controles de Windows Forms estándar y además incorporen funcionalidad personalizada.Through inheritance you are able to create controls that retain all of the inherent functionality of standard Windows Forms controls but also incorporate custom functionality. En este tutorial, creará un control heredado simple denominado ValueButton.In this walkthrough, you will create a simple inherited control called ValueButton. Este botón heredará la funcionalidad del control de Button de Windows Forms estándar y expondrá una propiedad personalizada denominada ButtonValue.This button will inherit functionality from the standard Windows Forms Button control, and will expose a custom property called ButtonValue.

Crear el proyectoCreate the Project

Cuando cree un proyecto, especifique su nombre para establecer el espacio de nombres raíz, el nombre de ensamblado y el nombre del proyecto, y para asegurarse de que el componente predeterminado estará en el espacio de nombres correcto.When you create a new project, you specify its name in order to set the root namespace, assembly name, and project name, and to ensure that the default component will be in the correct namespace.

Para crear la biblioteca de controles ValueButtonLib y el control ValueButtonTo create the ValueButtonLib control library and the ValueButton control

  1. En Visual Studio, cree un nuevo proyecto de biblioteca de controles Windows Forms y asígnele el nombre ValueButtonLib.In Visual Studio, create a new Windows Forms Control Library project, and name it ValueButtonLib.

    El nombre del proyecto, ValueButtonLib, también se asigna de forma predeterminada al espacio de nombres raíz.The project name, ValueButtonLib, is also assigned to the root namespace by default. El espacio de nombres raíz se utiliza para calificar los nombres de los componentes del ensamblado.The root namespace is used to qualify the names of components in the assembly. Por ejemplo, si dos ensamblados proporcionan componentes denominados ValueButton, puede especificar su componente ValueButton mediante ValueButtonLib.ValueButton.For example, if two assemblies provide components named ValueButton, you can specify your ValueButton component using ValueButtonLib.ValueButton. Para más información, consulte Espacios de nombres.For more information, see Namespaces.

  2. En el Explorador de soluciones, haga clic con el botón derecho en UserControl1.cs y elija Cambiar nombre en el menú contextual.In Solution Explorer, right-click UserControl1.cs, then choose Rename from the shortcut menu. Cambie el nombre del archivo a ValueButton.CS.Change the file name to ValueButton.cs. Haga clic en el botón cuando se le pregunte si desea cambiar el nombre de todas las referencias al elemento de código "UserControl1".Click the Yes button when you are asked if you want to rename all references to the code element 'UserControl1'.

  3. En el Explorador de soluciones, haga clic con el botón derecho en ValueButton.cs y seleccione Ver código.In Solution Explorer, right-click ValueButton.cs and select View Code.

  4. Busque la línea de instrucción de class, public partial class ValueButtony cambie el tipo del que hereda este control de UserControl a Button.Locate the class statement line, public partial class ValueButton, and change the type from which this control inherits from UserControl to Button. Esto permite que el control heredado herede toda la funcionalidad del control Button.This allows your inherited control to inherit all the functionality of the Button control.

  5. 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.In Solution Explorer, open the ValueButton.cs node to display the designer-generated code file, ValueButton.Designer.cs. Abra este archivo en el Editor de código.Open this file in the Code Editor.

  6. Busque el método InitializeComponent y quite la línea que asigna la propiedad AutoScaleMode.Locate the InitializeComponent method and remove the line that assigns the AutoScaleMode property. Esta propiedad no existe en el control Button.This property does not exist in the Button control.

  7. En el menú Archivo, elija Guardar todo para guardar el proyecto.From the File menu, choose Save All to save the project.

    Nota

    Ya no hay disponible ningún diseñador visual.A visual designer is no longer available. Dado que el control Button realiza su propia representación, no se puede modificar su apariencia en el diseñador.Because the Button control does its own painting, you are unable to modify its appearance in the designer. Su representación visual será exactamente la misma que la de la clase de la que hereda (es decir, Button) a menos que se modifique en el código.Its visual representation will be exactly the same as that of the class it inherits from (that is, Button) unless modified in the code. Todavía puede agregar componentes, que no tienen ningún elemento de interfaz de usuario, a la superficie de diseño.You can still add components, which have no UI elements, to the design surface.

Agregar una propiedad al control heredadoAdd a Property to Your Inherited Control

Un uso posible de los controles de Windows Forms heredados es la creación de controles que sean idénticos en apariencia y comportamiento a los controles de Windows Forms estándar, pero que expongan propiedades personalizadas.One possible use of inherited Windows Forms controls is the creation of controls that are identical in look and feel of standard Windows Forms controls, but expose custom properties. En esta sección, agregará una propiedad denominada ButtonValue al control.In this section, you will add a property called ButtonValue to your control.

Para agregar la propiedad ValueTo add the Value property

  1. En el Explorador de soluciones, haga clic con el botón derecho en ValueButton.cs y haga clic en Ver código en el menú contextual.In Solution Explorer, right-click ValueButton.cs, and then click View Code from the shortcut menu.

  2. Busque la instrucción class.Locate the class statement. Inmediatamente detrás de {, escriba el siguiente código:Immediately after the {, type the following code:

    // 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 por los que se almacena y se recupera la propiedad ButtonValue.This code sets the methods by which the ButtonValue property is stored and retrieved. La instrucción get establece el valor devuelto en el valor que se almacena en la variable privada varValue, y la instrucción set establece el valor de la variable privada mediante la palabra clave value.The get statement sets the value returned to the value that is stored in the private variable varValue, and the set statement sets the value of the private variable by use of the value keyword.

  3. En el menú Archivo, elija Guardar todo para guardar el proyecto.From the File menu, choose Save All to save the project.

Prueba del controlTest the control

Los controles no son proyectos independientes; deben hospedarse en un contenedor.Controls are not stand-alone projects; they must be hosted in a container. Para probar el control, debe proporcionar un proyecto de prueba donde pueda ejecutarse.In order to test your control, you must provide a test project for it to run in. También debe hacer que el control resulte accesible al proyecto de prueba al compilarlo.You must also make your control accessible to the test project by building (compiling) it. En esta sección, compilará el control y lo probará en Windows Forms.In this section, you will build your control and test it in a Windows Form.

Para compilar el controlTo build your control

En el menú Compilar , haga clic en Compilar solución.On the Build menu, click Build Solution. La compilación debería completarse correctamente sin advertencias ni errores del compilador.The build should be successful with no compiler errors or warnings.

Para crear un proyecto de pruebaTo create a test project

  1. En el menú Archivo, elija Agregar y haga clic en Nuevo proyecto para abrir el cuadro de diálogo Agregar nuevo proyecto.On the File menu, point to Add and then click New Project to open the Add New Project dialog box.

  2. Seleccione el nodo Windows, debajo del nodo Visual C# , y haga clic en Aplicación de Windows Forms.Select the Windows node, beneath the Visual C# node, and click Windows Forms Application.

  3. En el cuadro nombre , escriba prueba.In the Name box, enter Test.

  4. En el Explorador de soluciones, haga clic con el botón derecho en el nodo Referencias para su proyecto de prueba y seleccione Agregar referencia en el menú contextual para mostrar el cuadro de diálogo Agregar referencia.In Solution Explorer, right-click the References node for your test project, then select Add Reference from the shortcut menu to display the Add Reference dialog box.

  5. Haga clic en la pestaña etiquetada como Proyectos.Click the tab labeled Projects. El proyecto ValueButtonLib aparecerá en nombre del proyecto.Your ValueButtonLib project will be listed under Project Name. Haga doble clic en el proyecto para agregar la referencia al proyecto de prueba.Double-click the project to add the reference to the test project.

  6. En el Explorador de soluciones, haga clic con el botón derecho en Probar y seleccione Compilar.In Solution Explorer, right-click Test and select Build.

Para agregar el control al formularioTo add your control to the form

  1. En el Explorador de soluciones, haga clic con el botón derecho en Form1.cs y elija Ver diseñador en el menú contextual.In Solution Explorer, right-click Form1.cs and choose View Designer from the shortcut menu.

  2. En el cuadro de herramientas, seleccione los componentes de ValueButtonLib.In the Toolbox, select ValueButtonLib Components. Haga doble clic en ValueButton.Double-click ValueButton.

    Aparece un componente ValueButton en el formulario.A ValueButton appears on the form.

  3. Haga clic con el botón derecho en ValueButton y seleccione Propiedades en el menú contextual.Right-click the ValueButton and select Properties from the shortcut menu.

  4. En la ventana Propiedades, examine las propiedades de este control.In the Properties window, examine the properties of this control. Tenga en cuenta que son idénticas a las propiedades expuestas por un botón estándar, salvo que hay una propiedad adicional, ButtonValue.Note that they are identical to the properties exposed by a standard button, except that there is an additional property, ButtonValue.

  5. Establezca la propiedad ButtonValue en 5.Set the ButtonValue property to 5.

  6. En la pestaña todos los Windows Forms del cuadro de herramientas, haga doble clic en etiqueta para agregar un control de Label al formulario.In the All Windows Forms tab of the Toolbox, double-click Label to add a Label control to your form.

  7. Mueva la etiqueta al centro del formulario.Relocate the label to the center of the form.

  8. Haga doble clic en valueButton1.Double-click valueButton1.

    Se abre el Editor de código en el evento valueButton1_Click.The Code Editor opens to the valueButton1_Click event.

  9. Inserte la siguiente línea de código.Insert the following line of code.

    label1.Text = valueButton1.ButtonValue.ToString();
    
  10. En el Explorador de soluciones, haga clic con el botón derecho en Probar y elija Establecer como proyecto de inicio en el menú contextual.In Solution Explorer, right-click Test, and choose Set as Startup Project from the shortcut menu.

  11. En el menú Depurar, seleccione Iniciar depuración.From the Debug menu, select Start Debugging.

    Aparece Form1.Form1 appears.

  12. Haga clic en valueButton1.Click valueButton1.

    Se muestra el número "5" en label1, lo que demuestra que la propiedad ButtonValue del control heredado se ha pasado a label1 a través del método valueButton1_Click.The numeral '5' is displayed in label1, demonstrating that the ButtonValue property of your inherited control has been passed to label1 through the valueButton1_Click method. Por lo tanto, su control ValueButton hereda toda la funcionalidad del botón estándar de Windows Forms, pero expone una propiedad personalizada adicional.Thus your ValueButton control inherits all the functionality of the standard Windows Forms button, but exposes an additional, custom property.

Vea tambiénSee also