- •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
.NET Table 6.1 OpenFileDialog class
The OpenFileDialog class represents a common file dialog box for loading one or more files from disk, and is part of the System.Windows.Forms namespace. This class inherits from the FileDialog class, and is the standard class for opening existing files. See .NET Table 1.2 on page 24 for a list of members inherited from the FileDialog class.
|
Multiselect |
Gets or sets whether the user can select |
|
|
multiple files in the dialog. The FileNames |
|
|
property inherited from the FileDialog class |
|
|
should be used to retrieve the selected files. |
Public Properties |
ShowReadOnly |
Gets or sets whether the dialog should contain |
|
||
|
|
a read-only check box. Defaults to false. |
|
ReadOnlyChecked |
Gets or sets whether the read only checkbox is |
|
|
checked. Defaults to false. |
|
|
|
Public Methods |
OpenFile |
Returns a Stream with read-only access for the |
|
|
file specified by the FileName property. |
|
|
|
The steps to implement a Click event handler for the Add menu are shown in the following table.
Set the version number of the MyPhotos application to 6.2.
|
|
IMPLEMENT ADD HANDLER |
|
|
|
|
|
|
Action |
|
Result |
|
|
|
|
1 |
Open the Windows Forms |
|
As we have seen before, a graphic of the current layout for |
|
Designer window for the |
|
this form is displayed. |
|
MainForm.cs file. |
|
|
|
|
|
|
2 |
Add a Click event handler for |
|
A new menuAdd_Click method is added to and displayed in |
|
the Add item under the Edit |
|
the MainForm.cs source file. |
|
menu. |
|
The line to add the handler is created by Visual Studio in the |
|
|
|
|
|
How-to |
|
InitializeComponent method automatically: |
|
Double-click on the menu |
|
menuAdd.Click += new |
|
item. |
|
|
|
|
EventHandler (this.menuAdd_Click); |
|
|
|
|
|
3 |
Remove the |
|
Note: This code opens a single file and arranges to dis- |
|
menuLoad_Click handler and |
|
play it in the window. Here, we just want to add the file |
|
copy its code into the |
|
to the album, so some changes are required. The code |
|
menuAdd_Click handler. |
|
in the subsequent steps is based on the Load handler, |
|
|
|
although there are some differences. In particular, we |
|
|
|
do not handle any exceptions that might occur. This is |
|
|
|
done intentionally so that we can discuss the handling |
|
|
|
of such exceptions in chapter 7. |
|
|
|
|
MULTIPLE FILE SELECTION |
167 |
IMPLEMENT ADD HANDLER (continued)
|
Action |
Result |
|
|
|
4 |
Initialize an OpenFileDialog |
protected void menuAdd_Click |
|
instance to allow multiple |
(object sender, System.EventArgs e) |
|
selections of various image |
{ |
|
OpenFileDialog dlg = new OpenFileDialog(); |
|
|
file types. |
|
|
|
|
|
How-to |
dlg.Title = "Add Photos"; |
|
dlg.Multiselect = true; |
|
|
Use the Multiselect |
|
|
dlg.Filter |
|
|
property to allow multiple files |
= "Image Files (JPEG, GIF, BMP, etc.)|" |
|
to be selected. |
+ "*.jpg;*.jpeg;*.gif;*.bmp;" |
|
Note: The Filter setting |
+ "*.tif;*.tiff;*.png|" |
|
+ "JPEG files (*.jpg;*.jpeg)|*.jpg;*.jpeg|" |
|
|
here includes most of the |
+ "GIF files (*.gif)|*.gif|" |
|
common formats users are |
+ "BMP files (*.bmp)|*.bmp|" |
|
+ "TIFF files (*.tif;*.tiff)|*.tif;*.tiff|" |
|
|
likely to see. All of these for- |
|
|
+ "PNG files (*.png)|*.png|" |
|
|
mats are supported by the |
+ "All files (*.*)|*.*"; |
|
Bitmap class. |
dlg.InitialDirectory |
|
|
= Environment.CurrentDirectory; |
|
|
|
5 |
Invoke the dialog and process |
if (dlg.ShowDialog() == DialogResult.OK) |
|
an OK response. |
{ |
|
|
|
6 |
Extract the array of files |
string[] files = dlg.FileNames; |
|
selected by the user. |
|
|
|
|
7 |
Turn off the status bar panels |
statusBar1.ShowPanels = false; |
|
while the images are loading. |
statusBar1.Text |
|
|
= String.Format("Loading {0} Files", |
|
|
files.Length); |
|
|
|
8 |
Iterate through the array of |
int index = 0; |
|
selected files. |
foreach (string s in files) |
|
|
{ |
|
|
|
9 |
Add each image to the album |
Photograph photo = new Photograph(s); |
|
if it is not already present. |
// Add the file (if not already present) |
|
How-to |
|
|
index = _album.IndexOf(photo); |
|
|
Use the IndexOf method to |
if (index < 0) |
|
see if the photo is already in |
{ |
|
index = _album.Add(photo); |
|
|
the album. |
|
|
_bAlbumChanged = true; |
|
|
|
} |
|
|
} |
|
|
Note: The IndexOf method relies on the Equals override |
|
|
we implemented in chapter 5. |
|
|
|
10 |
Dispose of the nonmemory |
dlg.Dispose(); |
|
resources used by the dialog. |
|
|
|
|
11 |
Invalidate the main window to |
this.Invalidate(); |
|
display the new settings. |
} |
|
|
} |
|
|
|
In the code, note how the Multiselect property is used to permit multiple file selections. This property is one of the few OpenFileDialog members not inherited from the FileDialog class.
168 |
CHAPTER 6 COMMON FILE DIALOGS |