Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C# ПІДРУЧНИКИ / c# / Manning - Windows.forms.programming.with.c#.pdf
Скачиваний:
108
Добавлен:
12.02.2016
Размер:
14.98 Mб
Скачать

C H A P T E R

9

 

 

Basic controls

9.1Form inheritance 264

9.2Labels and text boxes 271

9.3Button classes 290

9.4Recap 313

The .NET Framework provides a number of controls for use in Windows Forms applications. This chapter will introduce the most basic of these, namely the Label,

TextBox, Button, RadioButton, and CheckBox controls. These controls date back to the original version of Windows,1 and before that to other graphical environments in other operating systems, so they must be somewhat useful. In practice, labels, text boxes, and the various button types are critical in almost any Windows application, so it is worth spending a little time to see how they are added to and utilized by applications.

As usual, we will discuss the classes for these controls in the context of our MyPhotos application. This will require that we do some work on our PhotoAlbum and Photograph classes. Our controls are not very useful unless they can be integrated into an application, so these changes should illustrate how similar constructs can be used in your own applications. In addition, such changes present opportunities to discuss additional concepts such as the .NET DateTime structure and the C# delegate keyword.

1List boxes and combo boxes were part of this version as well, but we will leave these controls to the next chapter.

263

Specific Windows Forms concepts we will cover in this chapter include:

Form inheritance: what is it and how do you do it?

Basic Windows Forms controls: the Label, TextBox, Button, RadioButton, and CheckBox classes.

Container controls such as Panel and GroupBox objects.

In addition, we will also look at the following related concepts:

The C# delegate keyword.

The System.DateTime structure.

Keyboard and focus events for controls.

Using the Control.Tag property.

To enable our discussion of all this and more, we will create two modal dialog boxes for our form, shown in the first section as figure 9.1. These will represent various settings the user can modify on an individual photograph or entire album. While we will discuss each control generally, these two dialogs will serve to demonstrate the creation and usage of each control as we move through the chapter.

We begin our discussion with form inheritance.

9.1FORM INHERITANCE

The concept of object inheritance is often explained with the canonical Employee class derived from a Person class. The derived class, in this case Employee, inherits the properties and functionality found in the parent class, e.g., Person. For example, the Person class might provide properties and methods for tracking the address of a person. The Employee class inherits these members and supports this functionality without the addition of any new code.2

The .NET Framework allows a similar behavior for Forms. You can create a form, and then reuse that form in the creation of additional forms. The parent form defines various members and controls that child forms will inherit. Controls on the form define their access level, such as private, protected, or public, just like members of any other class. A child form can modify these controls to the extent of their assigned access level.

For our application, we would like to add the two dialogs shown in figure 9.1. The first is for editing the properties of a specific photograph, and the second for editing the properties of an album. While the contents of these two windows are entirely different, they are both modal dialog boxes and share a common set of buttons at the base of the form and a panel at the top.

2 The overview of C# in appendix B provides additional information on inheritance.

264

CHAPTER 9 BASIC CONTROLS

Figure 9.1 These dialogs are created using only the controls discussed in this chapter.

We could just be very careful here, and ensure that the two dialogs appear and behave in a similar manner. But who wants to be careful? Instead, this is a great chance to use a common Form for both windows to see how form inheritance works.

In this section we will create the base window and a derived window for use in subsequent sections. Since our new windows will be specific to the PhotoAlbum and Photograph classes, we will create these objects in the MyPhotoAlbum library.

9.1.1CREATING A BASE FORM

A base form is created just like any other form object. Since our base form does not use any settings we haven’t seen in earlier chapters, let’s whip through the creation of this new window. Before we do, you may recall that we modified the namespace for the Photograph and PhotoAlbum classes in chapter 5 to include the Manning prefix. Rather than continue to do this by hand, we can modify the project properties so that this namespace is used by default.

Set the version number of the MyPhotoAlbum to 9.1.

MODIFY THE NAMESPACE FOR FILES IN THE MYPHOTOALBUM PROJECT

 

Action

Result

 

 

 

1

Set the default namespace for the

This ensures that all future classes

 

MyPhotoAlbum project to

created for this project will use the

 

Manning.MyPhotoAlbum.

Manning.MyPhotoAlbum namespace.

 

How-to

 

 

a. Right-click the MyPhotoAlbum project in the

 

 

Solution Explorer window.

 

 

b. Select Properties.

 

 

c. In the MyPhotoAlbum Property Pages window,

 

 

make sure the General settings are shown.

 

 

d. Modify the Default Namespace setting to be

 

 

“Manning.MyPhotoAlbum.”

 

 

 

 

FORM INHERITANCE

265

This ensures that any new objects added to the project will be created with this namespace. With this change in place, we can create our base form.

Here we will just create the form and its controls. Later in this section we will create some infrastructure that will be useful in our derived forms later in the chapter.

CREATE THE BASEEDITDLG FORM

 

 

 

 

Action

 

 

 

Result

 

 

 

 

 

 

 

 

 

 

2

Add a new Form to the MyPhotoAlbum

The new class appears in the Solution Explorer

 

project called “BaseEditDlg.”

 

 

 

window and the BaseEditDlg.cs [Design]

 

 

 

 

 

 

 

 

 

 

 

window is displayed.

 

 

 

 

 

 

 

 

 

 

3

Add the three buttons to the form. Assign

 

 

their settings and position as shown.

 

 

 

 

 

Settings

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Button

Property

 

Value

 

 

 

 

OK

(Name)

 

btnOk

 

 

 

 

 

DialogResult

 

OK

 

 

 

 

 

 

Text

 

&OK

 

 

 

Reset

(Name)

 

btnReset

 

 

 

 

 

 

Text

 

&Reset

 

 

 

Cancel

(Name)

 

btnCancel

 

 

 

 

 

DialogResult

 

Cancel

 

 

 

 

 

 

Text

 

&Cancel

 

 

 

 

 

 

 

 

 

 

 

 

 

4

Add a Panel to the top of the form.

 

 

 

 

 

Settings

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Property

 

Value

 

 

 

 

BorderStyle

 

FixedSingle

 

 

 

 

Modifiers

 

Protected

 

 

Note: The Modifiers property used here

 

 

establishes the accessibility level of the

 

 

control. The three buttons use the default

 

 

setting of Private. The Protected setting

 

 

creates a protected control so that it can

 

 

be modified in subclasses.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

266

CHAPTER 9 BASIC CONTROLS

CREATE THE BASEEDITDLG FORM (continued)

 

 

Action

 

 

Result

 

 

 

 

 

 

5

Set the properties for the BaseEditDlg

 

 

form to make it a dialog box.

 

 

 

Settings

 

 

 

 

 

 

 

 

 

 

 

Property

 

Value

 

 

 

AcceptButton

 

btnOk

 

 

 

CancelButton

 

btnCancel

 

 

 

FormBorderStyle

 

FixedDialog

 

 

 

MaximizeBox

 

False

 

 

 

MinimizeBox

 

False

 

 

 

ShowInTaskBar

 

False

 

 

 

Size

 

300, 320

 

 

 

 

 

 

 

 

 

The code generated here is similar to code we have seen for other forms in our application. The one exception is the panel1 control. The three buttons are defined as private controls as have all the controls we created in earlier chapters. The panel1 object is a protected control. As we shall see, this will allow our child forms to modify the settings of this panel, and in particular change its size to accommodate the desired collection of controls.

namespace Manning.MyPhotoAlbum

{

///<summary>

///Base form window.

///</summary>

public class BaseEditDlg : System.Windows.Forms.Form

{

private System.Windows.Forms.Button btnOk; private System.Windows.Forms.Button btnReset; private System.Windows.Forms.Button btnCancel; protected System.Windows.Forms.Panel panel1;

The cause of this change is the Modifiers property setting. This is not an actual property in the C# sense, and does not appear in the documentation for the Button class. This setting appears in the Properties window within Visual Studio to allow the access level for a control to be set. There are five possible values of this setting, as shown in the following table:

FORM INHERITANCE

267

Соседние файлы в папке c#