Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Microsoft CSharp Programming For The Absolute Beginner (2002) [eng]-1.pdf
Скачиваний:
46
Добавлен:
16.08.2013
Размер:
15.71 Mб
Скачать

Creating Instance Variables in the Font Chooser

To write the Font Chooser program, I created the form design illustrated in Figure 6.18 and modified the program. Realizing that the key part of the program would be the creation of a font, I looked up the font object in the .NET documentation. Figure 6.19 shows the initial help screen for the font object.

Figure 6.19: The Font class has a three−parameter constructor that builds a font based on exactly the information the form generates.

I found the class in the System.Drawing package. The font object has several constructors, but I was interested in creating a font based on the font’s name, size, and style. Fortunately, I found a constructor that creates a font using exactly those parameters. I let the Designer build the initial code. Then I added some local instance variables for each part of the font. The following code generates my private instance variables for the font:

public class myForm : System.Windows.Forms.Form

{

//Here's my own variables

private System.Drawing.Font myFont; private string fontName = "Arial"; private int fontSize = 20;

private FontStyle myStyle = FontStyle.Regular;

//these variables were created by the designer private System.Windows.Forms.ListBox lstFontName; private System.Windows.Forms.Label lblOutput; private System.Windows.Forms.CheckBox chkBold; private System.Windows.Forms.CheckBox chkItalic; private System.Windows.Forms.RadioButton rad20; private System.Windows.Forms.RadioButton rad10;

Note that I also included the instance variable declarations inserted by the Designer. Putting your own variables at the top of the class definition is better because the Designer always adds new

154

variables at the end of the instance variables list. You’ll probably want to separate the variables you have created from those made by the Designer software. Notice, also, how I commented the variables to track which ones I created.

I knew that I would eventually create a style based on a string for the font’s name, a number for its size, and an instance of the FontStyle object (whatever that is) for the style. Of course, I then looked up FontStyle and found out that it is a simple code listing all the legal styles of fonts.

In the Real World

Technically, FontStyle is an enumeration, which is a fixed list of values with names. However, you don’t have to know this to use it. When you need it, you can do as I did and look it up to learn the special characteristics that make it useful. In the section " Getting the Style from the Check Boxes," I’ll describe more fully how I used FontStyle.

Writing the AssignFont() Method

Whatever actions the user takes in this form will result in creating a new font object and assigning it to the Font property of lblOutput. I wrote a method named AssignFont() to handle this duty:

private void AssignFont(){

// uses the variables to assign a font

//check the list box for a font name fontName = lstFontName.Text;

//look at check boxes for styles myStyle = FontStyle.Regular;

if (chkBold.Checked){

myStyle = myStyle | FontStyle.Bold; } // end if

if (chkItalic.Checked){

myStyle = myStyle | FontStyle.Italic; } // end if

//create the new font and attach to the label myFont = new Font(fontName, fontSize, myStyle); lblOutput.Font = myFont;

} // end AssignFont

Trick To write a method that isn’t associated with an event, write the method just as you do in ordinary classes. However, you might want to put your custom methods right after the instance variable declarations. All event methods created by the editor are placed at the end of the class automatically. Many programmers prefer to keep custom methods and automatically generated methods (the event handlers) in distinct segments of the file.

The key to the AssignFont() method is in the last two lines. These code lines create a new font based on the fontName, fontSize, and myStyle variables and copy that font to the Font property of lblOutput. The beginning part of the method gets the values from the various selection elements on the screen.

155

Getting the Font Name from the List Box

By the time the user sees the list box, it has a set of legal font names in place. When the user clicks a font name, the Text property of the list box reflects the currently selected value. A list box is perfect for a situation like this because font names are very specific. If you were to allow the user to type in a font name, you would have to do all kinds of error trapping in case the user either asks for a font that does not exist or makes a typing error. If you have more items in the list than can fit on the area allocated on the screen, the list box automatically adds a scroll bar. To retrieve the font name from the list box is a very straightforward affair:

fontName = lstFontName.Text;

This copies the currently selected text in the list box to the fontName variable.

Getting the Style from the Check Boxes

The font style is more complicated because there are several possible combinations of styles. Here’s the code that generates a font style:

//look at check boxes for styles myStyle = FontStyle.Regular;

if (chkBold.Checked){

myStyle = myStyle | FontStyle.Bold; } // end if

if (chkItalic.Checked){

myStyle = myStyle | FontStyle.Italic; } // end if

The segment begins by assigning the value Regular to myStyle. Check boxes have a Boolean property named Checked that returns true if the box has been checked by the user and false, otherwise.

If the chkBold check box’s Checked property is true, the Bold style is incorporated into the style object. If the chkItalic is checked, the Italic style is incorporated into the style object. I incorporated the styles by using a little binary magic. The pipe symbol (|) indicates a bitwise or operation. The values of the various styles are set up so that you can use this operator to combine any number of values. You can check with your friendly neighborhood computer scientist to discover what a bitwise or operator does and why it is used here, or you can simply trust the documentation that comes with the FontStyle entry in .NET (as I did) and move on. (Okay, I am a friendly neighborhood computer scientist, but you really can live without all those details right now.)

The end result of this code fragment is that myStyle will be bold if chkBold is checked, italic if chkItalic is checked, bold and italic if both check boxes are selected, and neither bold nor italic if neither box is checked.

Finding the Font Size Code

You might be surprised that there is no code in the AssignFont() method for dealing with setting the font size. It turned out to be more convenient to assign the size when the option button is pressed. You’ll see the code when I show you the event handlers (next). I’ll also explain why I didn’t put that code in AssignFont().

156

Соседние файлы в предмете Программирование на C++