- •brief contents
- •about this book
- •The Windows Forms namespace
- •Part 1: Hello Windows Forms
- •Part 2: Basic Windows Forms
- •Part 3: Advanced Windows Forms
- •Who should read this book?
- •Conventions
- •Action
- •Result
- •Source code downloads
- •Author online
- •acknowledgments
- •about .NET
- •Casting the .NET
- •Windows Forms overview
- •about the cover illustration
- •Hello Windows Forms
- •1.1 Programming in C#
- •1.1.1 Namespaces and classes
- •1.1.2 Constructors and methods
- •1.1.3 C# types
- •1.1.4 The entry point
- •1.1.5 The Application class
- •1.1.6 Program execution
- •1.2 Adding controls
- •1.2.1 Shortcuts and fully qualified names
- •1.2.2 Fields and properties
- •1.2.3 The Controls property
- •1.3 Loading files
- •1.3.1 Events
- •1.3.2 The OpenFileDialog class
- •1.3.3 Bitmap images
- •1.4 Resizing forms
- •1.4.1 Desktop layout properties
- •1.4.2 The Anchor property
- •1.4.3 The Dock property
- •1.5 Recap
- •2.1 Programming with Visual Studio .NET
- •2.1.1 Creating a project
- •Action
- •Result
- •2.1.2 Executing a program
- •Action
- •Result
- •2.1.3 Viewing the source code
- •View the code generated by Visual Studio .NET
- •Action
- •Result
- •2.2 Adding controls
- •2.2.1 The AssemblyInfo file
- •Action
- •Results
- •2.2.2 Renaming a form
- •Action
- •Result
- •2.2.3 The Toolbox window
- •Action
- •Result
- •2.3 Loading files
- •2.3.1 Event handlers in Visual Studio .NET
- •Action
- •Result
- •2.3.2 Exception handling
- •Action
- •Result
- •Action
- •Results and Comments
- •2.4 Resizing forms
- •2.4.1 Assign the Anchor property
- •Action
- •Result
- •2.4.2 Assign the MinimumSize property
- •Action
- •Result
- •2.5 Recap
- •Basic Windows Forms
- •Menus
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •3.3 Click events
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •3.5 Context menus
- •Action
- •Result
- •Action
- •Result
- •3.6 Recap
- •Status bars
- •4.1 The Control class
- •4.2 The StatusBar class
- •Action
- •Result
- •Action
- •Result
- •4.3.1 Adding panels to a status bar
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •4.5 Recap
- •Reusable libraries
- •5.1 C# classes and interfaces
- •5.2 Class libraries
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •5.3 Interfaces revisited
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •5.4 Robustness issues
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Common file dialogs
- •Action
- •Results
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •6.3 Paint events
- •Action
- •Result
- •Action
- •Result
- •6.4 Context menus revisited
- •Action
- •Result
- •Action
- •Result
- •6.5 Files and paths
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •6.6 Save file dialogs
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •6.7 Open file dialogs
- •Action
- •Result
- •Action
- •Result
- •6.8 Recap
- •Drawing and scrolling
- •7.1 Form class hierarchy
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •7.4 Panels
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Dialog boxes
- •8.1 Message boxes
- •Action
- •Result
- •Action
- •Result
- •8.1.4 Creating A YesNoCancel dialog
- •Action
- •Result
- •Action
- •Result
- •8.2 The Form.Close method
- •8.2.1 The relationship between Close and Dispose
- •Action
- •Result
- •8.3 Modal dialog boxes
- •Action
- •Result
- •Action
- •Result
- •8.3.2 Preserving caption values
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Basic controls
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •9.1.2 Creating a derived form
- •Action
- •Result
- •9.2 Labels and text boxes
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •9.3.6 Adding AlbumEditDlg to our main form
- •Action
- •Result
- •Action
- •Result
- •9.4 Recap
- •List controls
- •10.1 List boxes
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •10.2 Multiselection list boxes
- •10.2.1 Enabling multiple selection
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •10.3 Combo boxes
- •Action
- •Result
- •Action
- •Result
- •10.4 Combo box edits
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •10.5 Owner-drawn lists
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •More controls
- •Action
- •Result
- •Action
- •Result
- •11.2 Tab pages
- •Action
- •Result
- •Action
- •Result
- •11.3.1 Dates and times
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •11.5 Recap
- •A .NET assortment
- •12.1 Keyboard events
- •Action
- •Result
- •Action
- •Result
- •12.2 Mouse events
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •12.3 Image buttons
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •12.4 Icons
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •12.5 Recap
- •Toolbars and tips
- •13.1 Toolbars
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •13.4.2 Creating tool tips
- •Action
- •Result
- •Action
- •Result
- •Advanced Windows Forms
- •List views
- •14.2 The ListView class
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •14.2.3 Populating a ListView
- •Action
- •Result
- •Action
- •14.3 ListView columns
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •14.6 Recap
- •Tree views
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •15.3 Dynamic tree nodes
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •15.4 Node selection
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •15.5 Fun with tree views
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Multiple document interfaces
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •16.3 Merged menus
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •16.4 MDI children
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •16.5 MDI child window management
- •Action
- •Result
- •Action
- •Result
- •16.6 Recap
- •Data binding
- •17.1 Data grids
- •Action
- •Result
- •Action
- •Result
- •17.2 Data grid customization
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Odds and ends .NET
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •18.2 Timers
- •Action
- •Result
- •Action
- •Result
- •18.3 Drag and drop
- •Action
- •Result
- •Action
- •Result
- •18.4 ActiveX controls
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •Action
- •Result
- •18.5 Recap
- •C# primer
- •A.1 C# programs
- •A.1.1 Assemblies
- •A.1.2 Namespaces
- •A.2 Types
- •A.2.1 Classes
- •A.2.2 Structures
- •A.2.3 Interfaces
- •A.2.4 Enumerations
- •A.2.5 Delegates
- •A.3 Language elements
- •A.3.1 Built-in types
- •A.3.2 Operators
- •A.3.3 Keywords
- •A.4 Special features
- •A.4.1 Exceptions
- •A.4.2 Arrays
- •A.4.3 Main
- •A.4.4 Boxing
- •A.4.5 Documentation
- •.NET namespaces
- •B.1 System.Collections
- •B.2 System.ComponentModel
- •B.3 System.Data
- •B.4 System.Drawing
- •B.5 System.Globalization
- •B.6 System.IO
- •B.7 System.Net
- •B.8 System.Reflection
- •B.9 System.Resources
- •B.10 System.Security
- •B.11 System.Threading
- •B.12 System.Web
- •B.13 System.Windows.Forms
- •B.14 System.XML
- •Visual index
- •C.1 Objects
- •C.2 Marshal by reference objects
- •C.3 Components
- •C.4 Common dialogs
- •C.7 Event data
- •C.8 Enumerations
- •For more information
- •bibliography
- •Symbols
- •Index
18.2 |
TIMERS |
|
|
We will look at Windows Forms timers |
|
|
next. A timer is an object that raises an |
|
|
event after a configurable period of time |
|
|
has elapsed. There are, in fact, three |
|
|
Timer classes provided by the .NET |
|
|
Framework. There is one in the Sys- |
|
|
tem.Threading namespace for use |
|
|
among multiple threads; one in the |
|
|
System.Timers namespace for server- |
|
|
based recurring tasks; and one in the |
|
|
System.Windows.Forms namespace |
|
|
that is optimized for the single-threaded |
|
|
processing environment used to handle |
|
|
events in a Form object. |
|
|
Here we will concern ourselves with |
|
|
the Windows Forms timer. This timer |
|
|
object is normally associated and config- |
Figure 18.2 The slide show uses a TrackBar |
|
ured within a form. For our example, we |
control to track the current position within the |
|
|
album.
will create a small slide show form that
will flip through each photo in an album. Our new window is shown in figure 18.2, and will be accessible from a new menu item in the View menu of our MyPhotos MDI application. A quick summary of the Timer class we will use is given in .NET Table 18.2.
.NET Table 18.2 Timer class
The Windows Forms Timer class represents a timer component that raises events at userdefined intervals. This timer is optimized for use in Windows Forms applications and is expected to occur within the processing thread for a Form object. This class is part of the
System.Windows.Forms namespace, and inherits from the System.ComponentModel.Component class.
|
Enabled |
Gets or sets whether the time is currently active. |
Public Properties |
|
|
|
Interval |
Gets or sets the time in milliseconds between timer ticks. |
|
|
|
|
Start |
Starts the timer. This is equivalent to setting the Enabled |
|
|
property to true. |
Public Methods |
|
|
|
Stop |
Stops the timer. This is equivalent to setting the Enabled |
|
|
property to false. |
|
|
|
Public Events |
Tick |
Occurs when the timer is enabled and the specified |
|
interval has elapsed. |
|
|
|
|
|
|
|
TIMERS |
611 |
Our discussion is divided into the user interface portion and the code portion.
18.2.1CREATING A SLIDE SHOW FORM
We begin our discussion with the design of the new form. This form will use a control we have not previously discussed, namely the TrackBar control. A summary of this control is given in .NET Table 18.3.
.NET Table 18.3 TrackBar class
The TrackBar class represents a control that supports tracking of an integer value through a scrolling interface. The control may appear horizontally or vertically. This class is part of the System.Windows.Forms namespace, and inherits from the Control class.
|
AutoSize |
Gets or sets whether the control should automatically |
|
|
resize based on its current settings. |
|
LargeChange |
Gets or sets the amount added or subtracted from |
|
|
the Value property for a large scroll in the control. |
|
|
The default is five (5). |
|
Maximum |
Gets or sets the maximum value for this track bar. The |
|
|
default is ten (10). |
|
Minimum |
Gets or sets the minimum value for this track bar. The |
|
|
default is zero (0). |
Public Properties |
Orientation |
Gets or sets the Orientation enumeration value for |
|
the display orientation of the control. |
|
|
|
|
|
SmallChange |
Gets or sets the amount added or subtracted from |
|
|
the Value property for a small scroll in the control. |
|
|
The default is one (1). |
|
TickFrequency |
Gets or sets the delta between tick marks drawn on |
|
|
the control. The default is one (1). |
|
TickStyle |
Gets or sets how the tick marks are displayed on the |
|
|
control. |
|
Value |
Gets or sets the numeric value of the current position |
|
|
of the slider in the control. |
|
|
|
Public Methods |
SetRange |
Sets the minimum and maximum values for the |
|
control. |
|
|
|
|
|
|
|
|
ValueChanged |
Occurs when the Value property of the control is |
Public Events |
|
modified, either by movement of the slider or |
|
|
assignment in code. |
|
|
|
The following table details the steps for drawing the user interface for the SlideShowForm class, including the TrackBar control:
612 |
CHAPTER 18 ODDS AND ENDS .NET |
Set the version number of the MyPhotos application to 18.2.
CREATE THE SLIDE SHOW FORM
|
|
|
|
|
|
|
Action |
Result |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
Add a new Form class file to the |
The new file is shown in the Solution Explorer |
|||||||||||
|
MyPhotos project called |
window, and the form in the Windows Forms |
|||||||||||
|
SlideShowForm.cs. |
|
|
|
|
Designer window. |
|||||||
|
|
|
|
|
|
|
Settings |
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
Property |
|
Value |
|
||||||
|
|
|
|
ControlBox |
|
False |
|
||||||
|
|
|
|
MaximizeBox |
|
False |
|
||||||
|
|
|
|
MinimizeBox |
|
False |
|
||||||
|
|
|
|
ShowInTaskbar |
|
False |
|
||||||
|
|
|
|
Size |
|
300, 340 |
|
|
|
|
|||
|
|
|
|
StartPosition |
|
CenterParent |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
Place a PictureBox object at the top |
This is shown in the graphic for the following step. |
|||||||||||
|
of the form. |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
Settings |
|
|||||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
Property |
|
|
Value |
|
|||||
|
|
|
|
(Name) |
|
|
|
pboxSlide |
|
||||
|
|
|
|
Anchor |
|
Top, Bottom, Left, Right |
|
||||||
|
|
|
BorderStyle |
|
Fixed3D |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
Place a Label, TextBox, and two |
|
|||||||||||
|
Button controls below the picture box. |
|
|||||||||||
|
Position these as shown in the graphic. |
|
|||||||||||
|
|
|
|
|
|
|
Settings |
|
|||||
|
|
|
|
|
|
|
|
||||||
|
|
|
Control |
|
Property |
Value |
|
||||||
|
|
|
|
Label |
|
Text |
&Interval |
|
|||||
|
|
|
|
|
|
Anchor |
Bottom, Left |
|
|||||
|
|
|
TextBox |
|
(Name) |
txtInterval |
|
||||||
|
|
|
|
|
|
Anchor |
Bottom, Left |
|
|||||
|
|
|
Button 1 |
|
Text |
2 |
|
|
|
|
|||
|
|
|
|
|
|
(Name) |
btnStop |
|
|||||
|
|
|
|
|
|
Anchor |
Bottom, Right |
|
|||||
|
|
|
|
|
|
Text |
&Stop |
|
|||||
|
|
|
Button 2 |
|
(Name) |
btnClose |
|
||||||
|
|
|
|
|
|
Anchor |
Bottom, Right |
|
|||||
|
|
|
|
|
|
Text |
&Close |
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TIMERS |
613 |
|
|
|
|
|
|
|
CREATE THE SLIDE SHOW FORM |
(continued) |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Action |
|
Result |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
Place a TrackBar control at the base of |
|
|
|||||||||
|
the form. |
|
|
|
|
|
|
|
||||
|
|
|
|
Settings |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Property |
|
|
Value |
|
|
||||
|
|
|
|
(Name) |
|
|
trackSlide |
|
|
|||
|
|
|
|
Anchor |
|
Bottom, Left, Right |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
Drag a Timer object onto the form. |
|
|
|||||||||
|
|
|
|
Settings |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Property |
|
Value |
|
|
||||
|
|
|
|
(Name) |
|
slideTimer |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
In the MainForm.cs [Design] window, |
|
|
|||||||||
|
add a Slide Show menu to the bottom |
|
|
|||||||||
|
of the View menu. |
|
|
|||||||||
|
|
|
|
Settings |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
Property |
|
|
Value |
|
|
|||
|
|
|
|
(Name) |
|
menuSlideShow |
|
|
||||
|
|
|
|
Text |
|
&Slide Show… |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
This completes the design of the interface. The next step is to hook up our controls in the code.
More .NET The ProgressBar class represents a control that permits the progress of an event or procedure to be displayed. This class is related to the TrackBar class in that it contains Minimum, Maximum, and Value properties to manage the current appearance of the control. You can check out this class in the .NET documentation.
I opted to use a track bar in our example because of its support for user adjustment of the current position via the Scroll event. This feature is not available in the ProgressBar class as it is not really intended to interact directly with the user.
614 |
CHAPTER 18 ODDS AND ENDS .NET |