Table of contents
What is the need of Visual Inheritance?
So, the biggest question before reading this article - what is the need of Visual Inheritance. We will need visual inheritance when we want to provide some base functionality to our application.
First, we will be coding all the base/common code into the Base Form (any Form
from which we want to inherit). Then instead of copying or writing some global functions to change the properties / call methods/etc. to use some functionality of the base form (as we used to do in our earlier languages), we can use form inheritance here.
We can inherit the base form into the form where we want to implement the common functionality. As we inherit the form, all the public
/protected
functionality of the base form gets merged into the child form.
For example: in a common scene, we have to design navigation panel in our application to navigate from one record to another. Previously, to avoid the repeatable code, we use ActiveX Control. First, we design the ActiveX Control for the navigation and then we place this onto our form where we want to implement the functionality.
But this time, we can code the functionality of the navigation panel in the base form and then inherit this form to achieve a similar functionality in the child and make the best use of Form inheritance.
Most of the times, when we want to give the functionality of navigational panels, status bars, info labels, etc. in our project, we can use form inheritance there. Code all these in the Base form and then inherit the base form into the forms where you want to implement the same functionality. If you want, you can also override some/all functionality of the Base forms from the child forms without affecting the base form.
From now onwards, Visual Inheritance and Form Inheritance can be used interchangeably. Now, you have the answer why you should read this article. So, guys you can enjoy reading.
Introduction
The major change occurred for the VB programmers, when Microsoft announced the launch of their new VB.NET to become the best successor for our most favorite programming language Visual Basic.
What VB lacks was the power of Inheritance, so Microsoft decided to implement inheritance in VB.NET. Every time we need a new form in our application, we create a new instance of the System.Windows.Forms.Form
class and change its properties to suit our needs. Place some controls, and our form is ready for use. As we know, by placing some controls on to a new form, we extend the Form
class to NewForm1
, means we have created a new class with a name NewForm1
. Our new form is a class, we can extend any class due to inheritance supported in .NET
So, from this, we can conclude that we can design the base form and use the base form design in all our forms.
Like we have:
Base Form:
Public Class PMainForm
Inherits System.Windows.Forms.Form
Child Forms:
Public Class ChildForm
Inherits PmainForm
Now, we can use the Child Forms in the ways we desired. Things we can do with our child forms: override the functionality of the base form within the child form itself (i.e. using Shadows
keyword in our functions in the child form � we will also see this in details later in this article). We can add custom properties to our base form and set them in the child forms (for controlling the controls which originally does not exist in the parent form).
Concept of Inheritance
I know that, OO programmers must know each and everything of inheritance. This section is especially for the non-OO based programmers, so the experienced OO programmers can skip this section.
Definition (Inheritance): Inheritance is the mechanism which allows a class A to inherit properties of a class B. We say "A inherits from B". Objects of class A thus have access to attributes and methods of class B without the need to redefine them. The following definition defines two terms with which we are able to refer to participating classes when they use inheritance.
Definition (Superclass/Subclass): If class A inherits from class B, then B is called superclass of A. A is called subclass of B. Objects of a subclass can be used where objects of the corresponding superclass are expected. This is due to the fact that objects of the subclass share the same behavior as objects of the superclass.
Superclasses are called parent classes. Subclasses may be called child classes or just derived classes. Of course, you can again inherit from a subclass, making this class the superclass of the new subclass. This leads to a hierarchy of superclass/subclass relationships. If you draw this hierarchy, you get an inheritance graph.
A common drawing scheme is to use arrowed lines to indicate the inheritance relationship between two classes or objects.
Visual Inheritance
We know how to create objects of classes. Just in a similar fashion, we can also inherit a Form
and I swear I am not kidding.
Is it possible to inherit the components of the parent form?
Yes, it is possible. But inheriting the controls does not mean that we are able to view the controls in the child forms, because we inherit the controls but not the properties of those controls which we had set into the Parent form. Means, suppose we have placed one Button
in the Parent form. And its Top
position is at 200px. This does not depict that if we inherit the Parent Form for the child class, then we will be able to see the same Button at the same position (i.e. Button1.Top = 200
).
So, how does this all happen? How are we able to see the controls of the parent form at the same location in the child form?
VS.NET does this by repositioning the controls in the child form. You can experience this. Go and change the position in the Parent Form
and don�t build the Parent form. Now open the Child Form
and see the difference in the position of the Button
, it is at the older position.
Means, the position of the button has not changed even if we have changed it in the parent form. So what VS.NET does is, it resets the properties of the controls in the Child form, when we compile the Parent form.
Now, you all know how VS.NET incorporates Visual Inheritance.
What�s new in this article?
If you simply inherit the form, you will not be able to change the properties of the controls that you have placed in the base form. This example covers:
- How to inherit the form?
- How to make custom properties?
- How to use the custom properties from the Child form?
- How to change the properties of the controls from the parent form, which are not in the parent form (i.e. they are in the Child forms)?
- How to override the functionality of the Parent form from the Child form?
- How to change the properties of the inherited controls at design time? (I.e. how to reposition the controls, set different properties, etc.)
1) How to inherit the form?
Open the child form and replace the Child form�s Inherits
line to <name of the parent form> from:
<System.Windows.Forms.Form>
Base Form:
Public Class PMainForm
Inherits System.Windows.Forms.Form
Child Forms:
Public Class ChildForm
Inherits PmainForm
2) How to make custom properties?
Open the Parent Form and create a property (having a scope as Protected Friend
).
Dim LPosition As Long
Protected Property Position() As Long
Get
Return LPosition
End Get
Set(ByVal Value As Long)
LPosition = Value
End Set
End Property
3) How to use the custom properties from the Child form?
Open the child form. Use Me.<propertyName>
to change the property. For e.g.: we are changing the property in the Load
event of the child form.
Private Sub CForm3_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Me.Position = 99
End Sub
4) How to change the properties of the controls from the parent form, which are not in the parent form (i.e. they are in the Child forms)?
Open the Parent Form, define a property which accepts Control
as return type.
Dim localLabel As LabelProtected Property InfoLabel() As Label
Get
Return localLabel
End Get
Set(ByVal Value As Label)
localLabel = Value
End Set
End Property
Now, open the child form. Place the control, which you want to use with the Parent Form. Change the ControlProperty
from the Child Form for the parent form, in any event of the child form. For this example, I have done this in the Load
event of the child form.
Private Sub CForm3_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Me.InfoLabel = Label1
Me.Position = 99
End Sub
5) How to override the functionality of the Parent form from the Child form?
Override that function of the parent form, which handles the particular functionality (For e.g. click
event of the Button
in the parent form).
If you copy and paste that function from the Parent form, please don�t forget to add the Shadows
attribute, for suppressing the function of the Parent form. (Note: when we use the Shadows
keyword, then there is no need to use the Overridable
keyword in the Parent form for that function.)
Parent Form:
Protected Friend Overridable Sub BParent_Click(ByVal _
sender As System.Object, ByVal e As System.EventArgs)_
Handles BParent.Click
MsgBox("Functionality of Parent is used.")
End Sub
Child Form:
Protected Friend Overrides Sub BParent_Click(ByVal _
sender As System.Object, ByVal e As System.EventArgs)
MsgBox("Functionality of Child is used.")
End Sub
Or
Protected Friend Shadows Sub BParent_Click(ByVal _
sender As System.Object, ByVal e As System.EventArgs)
MsgBox("Functionality of Child is used.")
End Sub
6) How to change the properties of the inherited controls at design time? (I.e. how to reposition the controls, set different properties, etc.)
The main problem, when we inherit any Parent form - it's very simple. Change the Modifiers
property of the control we want to control from the Child Form from Friend
to Protected Friend
. Note: Protected Friend will be not listed there, so please take some pains and perform the following steps:
- Open the Code Window for the Parent Form.
- Expand "Windows Form Designer generated code" section.
- Find
InitializeComponent()
function. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
- Above this function, you will find the initialization code for the controls which we have placed into the form. They will be like:
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents PBNavPrev As System.Windows.Forms.Button
Friend WithEvents NavCaption As System.Windows.Forms.Label
Friend WithEvents BParent As System.Windows.Forms.Button
Friend WithEvents NavPanel As System.Windows.Forms.Panel
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Change the access modifiers of the control to Protected Friend
for sharing them in the child form.
Protected Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Friend WithEvents PBNavPrev As System.Windows.Forms.Button
Protected Friend WithEvents NavCaption As System.Windows.Forms.Label
Protected Friend WithEvents BParent As System.Windows.Forms.Button
Protected Friend WithEvents NavPanel As System.Windows.Forms.Panel
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
For full understanding of the concept, you can download the accompanying application. This will provide you with a better view of form inheritance.
Well, that's it folks. Hopefully, this article will give a better understanding of how forms inheritance works internally. And how to avail the benefits of Visual Form Inheritance functionality of VS.NET.
And please don�t forget to rate this article, so that I can continue writing, improve myself and present you something "best". Feel free to ask me at saurabhdotnet@hotmail.com for any queries. I will feel very great.
So, now go and enjoy the things. I will be back soon with some "best" code example for ADO.NET, till then take care. Bye.