Walkthrough: Demonstrating Visual Inheritance
Visual inheritance enables you to see the controls on the base form and to add new controls. In this walkthrough you will create a base form and compile it into a class library. You will import this class library into another project and create a new form that inherits from the base form. During this walkthrough, you will learn how to:
Create a class library project containing a base form.
Add a button with properties that derived classes of the base form can modify.
Add a button that cannot be modified by inheritors of the base form.
Create a project containing a form that inherits from BaseForm.
Ultimately, this walkthrough will demonstrate the difference between private and protected controls on an inherited form.
The dialog boxes and menu commands you see might differ from those described in Help depending on your active settings or edition. To change your settings, choose Import and Export Settings on the Tools menu. For more information, see Working with Settings.
Not all controls support visual inheritance from a base form. The following controls do not support the scenario described in this walkthrough:
These controls in the inherited form are always read-only regardless of the modifiers you use (private, protected, or public).
The first step is to create the base form.
To create a class library project containing a base form
From the File menu, choose New, and then Project to open the New Project dialog box.
Create a Windows Forms application named BaseFormLibrary. For details, see How to: Create a New Windows Forms Application Project.
To create a class library instead of a standard Windows Forms application, in Solution Explorer, right-click the BaseFormLibrary project node and then select Properties.
In the properties for the project, change the Output type from Windows Application to Class Library.
From the File menu, choose Save All to save the project and files to the default location.
The next two procedures add buttons to the base form. To demonstrate visual inheritance, you will give the buttons different access levels by setting their Modifiers properties.
To add a button that inheritors of the base form can modify
Open Form1 in the designer.
On the All Windows Forms tab of the Toolbox, double-click Button to add a button to the form. Use the mouse to position and resize the button.
In the Properties window, set the following properties of the button:
Set the Text property to Say Hello.
Set the (Name) property to btnProtected.
Set the Modifiers property to Protected. This makes it possible for forms that inherit from Form1 to modify the properties of btnProtected.
Double-click the Say Hello button to add an event handler for the Click event.
Add the following line of code to the event handler:
To add a button that cannot be modified by inheritors of the base form
Switch to design view by clicking the Form1.vb [Design], Form1.cs [Design], or Form1.jsl [Design] tab above the code editor, or by pressing F7.
Add a second button and set its properties as follows:
Set the Text property to Say Goodbye.
Set the (Name) property to btnPrivate.
Set the Modifiers property to Private. This makes it impossible for forms that inherit from Form1 to modify the properties of btnPrivate.
Double-click the Say Goodbye button to add an event handler for the Click event. Place the following line of code in the event procedure:
From the Build menu, choose Build BaseForm Library to build the class library.
Once the library is built, you can create a new project that inherits from the form you just created.
To create a project containing a form that inherits from the base form
From the File menu, choose Add and then New Project to open the Add New Project dialog box.
Create a Windows Forms application named InheritanceTest. For details, see How to: Create a New Windows Forms Application Project.
To add an inherited form
In Solution Explorer, right-click the InheritanceTest project, select Add, and then select New Item.
In the Add New Item dialog box, select the Windows Forms category (if you have a list of categories) and then select the Inherited Form template.
Leave the default name of Form2 and then click Add.
In the Inheritance Picker dialog box, select Form1 from the BaseFormLibrary project as the form to inherit from and click OK.
This creates a form in the InheritanceTest project that derives from the form in BaseFormLibrary.
Open the inherited form (Form2) in the designer by double-clicking it, if it is not already open.
In the designer, the inherited buttons have a symbol () in their upper corner, indicating they are inherited.
Select the Say Hello button and observe the resize handles. Because this button is protected, the inheritors can move it, resize it, change its caption, and make other modifications.
Select the private Say Goodbye button, and notice that it does not have resize handles. Additionally, in the Properties window, the properties of this button are grayed to indicate they cannot be modified.
If you are using Visual C#:
In Solution Explorer, right-click Form1 in the InheritanceTest project and then choose Delete. In the message box that appears, click OK to confirm the deletion.
Open the Program.cs file and change the line Application.Run(new Form1()); to Application.Run(new Form2());.
In Solution Explorer, right-click the InheritanceTest project and select Set As Startup Project.
In Solution Explorer, right-click the InheritanceTest project and select Properties.
In the InheritanceTest property pages, set the Startup object to be the inherited form (Form2).
Press F5 to run the application, and observe the behavior of the inherited form.
Inheritance for user controls works in much the same way. Open a new class library project and add a user control. Place constituent controls on it and compile the project. Open another new class library project and add a reference to the compiled class library. Also, try adding an inherited control (through the Add New Items dialog box) to the project and using the Inheritance Picker. Add a user control, and change the Inherits (: in Visual C#) statement. For more information, see How to: Inherit Windows Forms.