Browse DevX
Sign up for e-mail newsletters from DevX


Working with Extender Classes : Page 2

In Visual Basic 6 you didn't need to worry about trapping events since VB6 handled everything automatically. In Visual Studio .NET this is not the case.




Building the Right Environment to Support AI, Machine Learning and Deep Learning

Classing Things Up
The first order of business is to create a textbox subclass that has the tooltip functionality I require. This involves creating a class library project. Figure 3 illustrates my BaseTextBox class definition.

Figure 3: BaseTextBox exposes a ToolTipText property and encapsulates the functionality of instantiating and displaying a tooltip.
Once you define the class, the next step involves compiling the project into a DLL. Once you create the DLL you can customize the ToolBox in your ExtenderClass project to include the new BaseTextBox class. The steps to customize the ToolBox are as follows:

  1. Right-click the toolbox and select Customize Toolbox.
  2. In the dialog, select the .NET Framework Classes tab.
  3. Click the Browse button and navigate to your class library DLL.
Figure 4 shows you the BaseTextBox class definition in the ToolBox. You can now implement the class like any other Framework control, including the ability to drag and drop the control onto any form.

Figure 4: Once you've added the BaseTextBox class to the ToolBox, you can simply drag and drop onto the form design surface.
In the Form Load event, this code sets the BaseTextBox's ToolTipText property:

Me.Basetextbox1.tooltiptext = _ "This textbox cannot be empty"

Look at Figure 5 to see how the BaseTextBox class works.

Error Provider Class
The Error Provider class provides a user friendly method to give feedback on input errors. Not only does it tell the user that an error has occurred, but it shows the user which data fields they have to correct.

Referring back to Figure 1 at the beginning of this article, you can see the Error Provider class next to the Tooltip class. Error Provider is a non-visual class; it only becomes active when invoked in the context of a specific control. The Error Provider is located in the ToolBox and is added to the form via the same drag and drop operation used to add a tooltip or any other Windows control.

Like the Tooltip class, you need to tell the Error Provider which control to extend. You could place the following in the Click event of the Check button:

If Basetextbox1.Text = "" Then ErrorProvider1.SetError(Basetextbox1,__ "Like I said, you cannot leave " & _ "this textbox empty!!") Else ErrorProvider1.Dispose() End If

The rule is simple. If the textbox is empty, set the error by passing a reference to the control that contains the invalid condition and text for the tooltip. If no error condition exists, it invokes the error provider's Dispose method, which releases any resources consumed by the error provider. This clears the errors. Figure 6 illustrates how the Error Provider class works.

Figure 6: The Error Provider class tells the user about the existence and location of data validation errors.
Because you're passing a reference to the control to the Error Provider, you don't need to worry about location. In other words, no matter where you put the control on the form, the Error Provider will always place the icon next to the offending control.

You can also use the Error Provider to work with bound data. Instead of working with the name of the control itself, you can validate data elements and raise errors through a dataset. Because Windows controls are bound to data elements, the Error Provider will locate the appropriate Windows control. To illustrate, consider the following code snippet:

Dim row As DataRow Dim iRow as Integer iRow = BindingContext( _ objAuthors, "authors").Position With ErrorProvider1 .DataSource = objAuthors .DataMember = "authors" .ContainerControl = Me End With If editphone.Text = "" Then row = objAuthors.authors.Rows(iRow) row.SetColumnError("phone", _ "Phone Number cannot be empty!") End If

The Error Provider is given a specific dataset to act upon. Once that information is in place, invoking the SetColumnError method will trigger the Error Provider to place an icon next to the appropriate user control. You may wonder how the Error Provider could know which user control is the correct one. Since the controls are bound to specific data elements and since you need to provide which column has the error, the Error Provider can determine which user control is bound to that column. Figure 7 illustrates the Error Provider at work in the data context.

Figure 7: You can use the Error Provider class to display errors raised through the data row's SetColumnError method.
Extender classes provide a way to extend the functionality of a Windows control. The Tooltip class allows you to add tooltip functionality that was previously native to Windows controls. While .NET has significantly changed how tooltips are implemented, the ability to subclass Windows controls in .NET allows you to encapsulate and reduce the amount of code required to implement tooltips.

The Error Provider class presents an interesting alternative to alerting users to input problems. Instead of displaying a generic message box, developers can easily implement functionality that not only alerts users to problems, but you can indicate to users where the problems exist.

John V. Petersen has over 10 years of professional software development and database design experience. He has spoken at developer events including Microsoft DevDays and TechEd. John has written numerous articles and books including Absolute Beginner's Guide to Databases (Que). John holds an MBA and is currently working on his law degree at the Rutgers University School of Law. You can reach John at john.v.petersen@comcast.net.
Thanks for your registration, follow us on our social networks to keep up-to-date