There are more than 50 GUI controls available in the .NET Framework Class Library. This chapter takes a selective look at some of the more important ones. They all derive from the System.Windows.Forms.Control class that provides the inherited properties and methods that all the controls have in common.

Timer and Progress Bar Controls: A timer can be used to control when an event is invoked, a ProgressBar to visually monitor the progress of an operation.

Building a User Control: When no control meets an application’s needs, a custom one can be crafted by combining multiple controls or adding features to an existing one.

Moving Data Between Controls: Drag and drop provides an easy way for users to copy or move an item from one control to another. .NET offers a variety of classes and events required to implement this feature.

Using Resources: Resources required by a program, such as title, descriptive labels, and images, can be embedded within an application’s assembly or stored in a satellite assembly. This is particularly useful for developing international applications.

The previous chapter introduced the Control class and the methods, properties, and events it defines for all controls. This chapter moves beyond that to examine the specific features of individual controls. It begins with a survey of the more important .NET controls, before taking an in-depth look at how to implement controls such as the TextBox, ListBox, TreeView, and ListView. Also included is a discussion of the .NET drag-and-drop features that are used to move or copy data from one control to another.

Windows Forms (WinForms) are not restricted to using the standard built-in controls. Custom GUI controls can be created by extending an existing control, building a totally new control, or fashioning a user control from a set of related widgets. Examples illustrate how to extend a control and construct a user control. The chapter concludes with a look at resource files and how they are used to create GUI applications that support users from multiple countries and cultures.

7.1 A Survey of .NET Windows Forms Controls

The System.Windows.Forms namespace contains a large family of controls that add both form and function to a Windows-based user interface. Each control inherits a common set of members from the Control class. To these, it adds the methods, properties, and events that give the control its own distinctive behavior and appearance.

Figure 7-1 shows the inheritance hierarchy of the Windows Forms controls. The controls marked by an asterisk (*) exist primarily to provide backward compatibility between .NET 2.0 and .NET 1.x. Specifically, the DataGrid has been superseded by the DataGridView, the StatusBar by the StatusStrip, and the ToolBar by the ToolStrip. Table 7-1 provides a summary of the more frequently used controls in this hierarchy.

Table 7-1 Selected Windows Forms Controls

Control

Use

Description

Button

Fires an event when a mouse click occurs or the Enter or Esc key is pressed.

Represents a button on a form. Its text property determines the caption displayed on the button’s surface.

CheckBox

Permits a user to select one or more options.

Consists of a check box with text or an image beside it. The check box can also be represented as a button by setting:

checkBox1.Appearance =

Appearance.Button

CheckedListBox

Displays list of items.

ListBox with checkbox preceding each item in list.

ComboBox

Provides TextBox and ListBox functionality.

Hybrid control that consists of a textbox and a drop-down list. It combines properties from both the TextBox and the ListBox.

DataGridView GridView

Manipulates data in a grid format.

The DataGridView is the foremost control to represent relational data. It supports binding to a database. The DataGridView was introduced in .NET 2.0 and supersedes the DataGrid.

GroupBox

Groups controls.

Use primarily to group radio buttons; it places a border around the controls it contains.

ImageList

Manages a collection of images.

Container control that holds a collection of images used by other controls such as the ToolStrip, ListView, and TreeView.

Label

Adds descriptive information to a form.

Text that describes the contents of a control or instructions for using a control or form.

ListBox

Displays a list of items—one or more of which may be selected.

May contain simple text or objects. Its methods, properties, and events allow items to be selected, modified, added, and sorted.

ListView

Displays items and subitems.

May take a grid format where each row represents a different item and subitems. It also permits items to be displayed as icons.

MenuStrip

Adds a menu to a form.

Provides a menu and submenu system for a form. It supersedes the MainMenu control.

Panel FlowPanelLayout TablePanelLayout

Groups controls.

A visible or invisible container that groups controls. Can be made scrollable.

Used to hold images in a variety of standard formats. Properties enable images to be positioned and sized within control’s borders.

ProgressBar

Depicts an application’s progress.

Displays the familiar progress bar that gives a user feedback regarding the progress of some event such as file copying.

RadioButton

Permits user to make one choice among a group of options.

Represents a Windows radio button.

StatusStrip

Provides a set of panels that indicate program status.

Provides a status bar that is used to provide contextual status information about current form activities.

TextBox

Accepts user input.

Can be designed to accept single- or multi-line input. Properties allow it to mask input for passwords, scroll, set letter casing automatically, and limit contents to read-only.

TreeView

Displays data as nodes in a tree.

Features include the ability to collapse or expand, add, remove, and copy nodes in a tree.

This chapter lacks the space to provide a detailed look at each control. Instead, it takes a selective approach that attempts to provide a flavor of the controls and features that most benefit the GUI developer. Notable omissions are the DataGridView control, which is included in the discussion of data binding in Chapter 12, "Data Binding with Windows Forms Controls," and the menu controls that were discussed in Chapter 6, "Building Windows Forms Applications."