- •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
•Highlight a set of files in Windows Explorer. Drag these files into one of the album windows. Each file is added to the window if not already present. The last file added is displayed in the window.
•Click on an image displayed in one album window and drag it to a second album window. The image is added to the second album, or displayed if it is already present.
This completes our drag and drop example. We should also mention that the
View and TreeView classes support per-item dragging via the ItemDrag event. The ItemDrag event occurs when the user begins dragging an item in the list or tree. Typically, the event handler for the ItemDrag event calls the DoDragDrop method as we did in this section, with the object associated with a specific list item or tree node as the source of the operation. For example, we could modify our MyAlbumExplorer interface to permit photographs to be reordered within the ListView control, or dragged into a new album in the TreeView control.
18.4ACTIVEX CONTROLS
Our final section will look at how to include an ActiveX control, more specifically the Microsoft Web Browser control, within a Windows Forms application. We will avoid a detailed discussion of ActiveX in general and the Web Browser control in particular, and instead allow the example to speak for itself.
Our example will host a browser control within an About Box dialog for our MyPhotos application. This may seem slightly unorthodox, but should create an interesting example while still presenting the topic at hand.
The foundation of ActiveX support in Windows Forms is the AxHost control. This abstract class is, quite simply, a control that hosts, or displays, an ActiveX control as a full-featured Windows Forms control. The class is based on the Windows Forms Control class so that the standard properties, methods, and events we have discussed throughout the book are available in hosted controls. The .NET framework provides an ActiveX Control Importer tool to generate an AxHost interface for a specific ActiveX control. We will discuss this tool in a moment.
In our application, we will create an AboutBox form to display information about the application. As shown in figure 18.4, this Form will include a LinkLabel object that will link to the web site for this book.
Figure 18.4
This form uses a Label control to display the application Icon, and LinkLabel controls to initiate user actions.
ACTIVEX CONTROLS |
625 |
We could just as easily use Button controls rather than link labels. Since we have not used LinkLabel objects in a previous example, this is a good opportunity to do so here. When the user clicks the “Click to close window” label, the window will close as we have seen with a Close button in previous examples. When the user clicks the “Click for book’s web site” label, a hidden panel will appear and display the web site for the book you are reading. This is shown in figure 18.5. Note in this figure that the title bar of the form reflects the current web page title, and the link label text now allows the user to hide the web browser. Of course, connecting to the web site presumes you have an active connection to the Internet available.
Figure 18.5 In the embedded web page in this window, the user can follow any links displayed and perform other standard browser actions in the window.
We will divide our discussion into three sections. First we will create the form required; then we will wrap the Web Browser control in an AxHost control, and finally we will use this new control to display the web page as in figure 18.5.
18.4.1CREATING THE ABOUT BOX
Our first task is to create the new Form class for our new About box. The steps required are as follows:
626 |
CHAPTER 18 ODDS AND ENDS .NET |
Set the version number of the MyPhotos application to 18.4.
|
|
|
|
|
DESIGN THE ABOUT BOX FORM |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
Action |
|
Result |
||||
|
|
|
|
|
|
|
|
|
|
1 |
Add a new Form class file to the |
|
|
||||||
|
MyPhotos project called |
|
|
||||||
|
AboutBox.cs. |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
2 |
Assign the following settings to the |
|
|
||||||
|
form. |
|
|
|
|
|
|
||
|
|
|
Settings |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Property |
|
Value |
|
|
||
|
|
|
MinimizeBox |
|
False |
|
|
||
|
|
|
ShowInTaskbar |
|
False |
|
|
||
|
|
|
Size |
400,144 |
|
|
|
|
|
|
|
|
StartPosition |
|
CenterParent |
|
|
||
|
|
|
Text |
|
About MyPhotos |
|
|
||
|
|
|
|
|
|
|
|
|
|
3 |
Drag an ImageList onto the form |
|
|
||||||
|
and set the following properties: |
|
|
||||||
|
|
|
Settings |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Property |
|
Value |
|
|
||
|
|
|
(Name) |
|
imageIcons |
|
|
||
|
|
|
ImageSize |
|
32, 32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
Add the following icons from the |
|
|
||||||
|
common image directory to the |
|
|
||||||
|
Images collection for this list. |
|
|
||||||
|
• icons/Writing/BOOK02.ICO |
|
|
||||||
|
• icons/Writing/BOOKS04.ICO |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
ACTIVEX CONTROLS |
627 |
DESIGN THE ABOUT BOX FORM (continued)
Action |
Result |
5Add the four labels, namely two
Label controls and two LinkLabel controls, to the form. Size and position them as shown in the graphic.
|
Settings |
|
|
|
|
|
|
Control |
Property |
|
Value |
Icon |
(Name) |
|
lblIcon |
Label |
BorderStyle |
|
FixedSingle |
|
|
||
|
ImageList |
|
imageIcons |
|
ImageIndex |
|
0 |
|
Text |
|
|
Text |
(Name) |
|
lblAboutText |
Label |
Anchor |
|
Top, Left, Right |
|
|
||
|
BorderStyle |
|
Fixed3D |
|
Text |
|
MyPhotos |
Site Link |
(Name) |
|
linkWebSite |
|
Text |
|
Click for book’s |
|
|
|
web site |
Close |
(Name) |
|
linkClose |
Link |
Anchor |
|
Top, Right |
|
|
||
|
Text |
|
Click to close |
|
|
|
window |
|
TextAlign |
|
TopRight |
|
|
|
|
6 |
Also add a hidden Panel control to |
|||
|
the base of the form. |
|||
|
|
|
Settings |
|
|
|
|
|
|
|
|
Property |
Value |
|
|
|
(Name) |
pnlWebSite |
|
|
|
Anchor |
Top, Bottom, Left, Right |
|
|
|
BorderStyle |
Fixed3D |
|
|
|
Visible |
False |
|
|
|
|
|
Note: The panel is visible in Visual Studio even |
|
|
|
||
|
|
|
|
though it will be hidden when the form is actu- |
|
|
|
|
ally displayed. |
This completes the design of our AboutBox form. We will also need a menu in the ParentForm class to display this form.
628 |
CHAPTER 18 ODDS AND ENDS .NET |