Table of Contents
brief contents vii
contents ix
preface xix
about this book xxi
acknowledgments xxviii
about .NET xxx
about the cover illustration xxxiv
Part 1 Hello Windows Forms 1
- 1 Getting started with Windows Forms 3
- 1.1 Programming in C# 4
- Namespaces and classes 6
Constructors and methods 8
C# types 9
The entry point 11
The Application class 11
Program execution 13
- 1.2 Adding controls 13
- Shortcuts and fully qualified names 15
Fields and properties 16
The Controls property 18
- 1.3 Loading files 18
- Events 20
The OpenFileDialog class 22
Bitmap images 24
- 1.4 Resizing forms 26
- Desktop layout properties 28
The Anchor property 29
The Dock property 31
- 1.5 Recap 33
- 2 Getting started with Visual Studio .NET 34
- 2.1 Programming with Visual Studio .NET 35
- Creating a project 36
Executing a program 39
Viewing the source code 39
- 2.2 Adding controls 43
- The AssemblyInfo file 43
Renaming a form 46
The Toolbox window 48
- 2.3 Loading files 54
- Event handlers in Visual Studio .NET 54
Exception handling 58
- 2.4 Resizing forms 61
- Assign the Anchor property 63
Assign the MinimumSize property 64
- 2.5 Recap 65
Part 2 Basic Windows Forms 67
- 3 Menus 69
- 3.1 The nature of menus 70
- The Menu class 71
The Menu class hierarchy 71
Derived classes 73
- 3.2 Menu bars 74
- Adding the Main menu 74
Adding the File menu 77
Adding the dropdown menu 79
Adding a View menu 83
- 3.3 Click events 85
- Adding handlers via the designer window 85
Adding handlers via the properties window 86
- 3.4 Popup events and shared handlers 88
- Defining a shared handler 89
Handling Popup events 93
- 3.5 Context menus 97
- Creating a context menu 98
Adding menu items 100
- 3.6 Recap 101
- 4 Status bars 102
- 4.1 The Control class 103
- 4.2 The StatusBar class 105
- Adding a status bar 106
Assigning status bar text 109
- 4.3 Status bar panels 110
- Adding panels to a status bar 111
Assigning panel text 116
- 4.4 Owner-drawn panels 118
- The DrawItem event 118
Drawing a panel 121
- 4.5 Recap 125
- 5 Reusable libraries 126
- 5.1 C# classes and interfaces 127
- Interfaces 128
Data collection classes 129
- 5.2 Class libraries 133
- Creating the class library 134
Using the command-line tools 138
Creating the PhotoAlbum class 139
Creating the Photograph class 141
- 5.3 Interfaces revisited 145
- Supporting the ICollection interface 146
Supporting the IList interface 146
Implementing album position operations 148
- 5.4 Robustness issues 151
- Handling an invalid bitmap 151
Overriding methods in the Object class 154
Disposing of resources 157
Associating a file name with an album 159
- 5.5 Recap 160
- 6 Common file dialogs 161
- 6.1 Design issues 162
- Changing the menu bar 162
Adding class variables 165
- 6.2 Multiple file selection 166
- Adding images to an album 166
Removing images from an album 169
- 6.3 Paint events 169
- Drawing the current photograph 170
Displaying the current position 171
- 6.4 Context menus revisited 173
- Displaying the next photograph 174
Displaying the previous photograph 174
- 6.5 Files and paths 175
- Creating a default album directory 175
Setting the title bar 179
Handling the New menu 180
- 6.6 Save file dialogs 181
- Writing album data 182
Saving an album as a new file 186
Saving an existing album 188
- 6.7 Open file dialogs 189
- Reading album data 190
Opening an album file 191
- 6.8 Recap 193
- 7 Drawing and scrolling 194
- 7.1 Form class hierarchy 195
- The ScrollableControl class 196
The Form class 196
- 7.2 Image drawing 198
- Deleting the PictureBox control 198
Handling the Image menu 199
Implementing the Stretch to Fit option 202
Implementing a Scale to Fit option 205
Repainting when the form is resized 210
- 7.3 Automated scrolling 212
- Properties for scrolling 213
Implementing automated scrolling 213
- 7.4 Panels 215
- Adding a panel 217
Updating the menu handlers 218
Drawing the status bar panel 219
Drawing the image 220
- 7.5 Recap 222
- 8 Dialog boxes 224
- 8.1 Message boxes 225
- The MessageBox.Show method 227
Creating an OK dialog 227
Creating a YesNo dialog 229
Creating A YesNoCancel dialog 230
- 8.2 The Form.Close method 233
- The relationship between Close and Dispose 233
Intercepting the Form.Close method 235
- 8.3 Modal dialog boxes 237
- Adding captions to photos 238
Preserving caption values 239
Creating the CaptionDlg form 240
Adding properties to the CaptionDlg form 247
Displaying the dialog in the MainForm class 249
- 8.4 Modeless dialogs 252
- Creating the PixelDlg form 253
Adding class members to PixelDlg 255
Displaying the modeless PixelDlg form 256
Updating the PixelDlg form 259
Updating PixelDlg as the mouse moves 260
- 8.5 Recap 262
- 9 Basic controls 263
- 9.1 Form inheritance 264
- Creating a base form 265
Creating a derived form 269
- 9.2 Labels and text boxes 271
- Expanding the Photograph class 272
Creating the PhotoEditDlg panel area 277
Creating the multiline text box 281
Adding PhotoEditDlg to our main form 285
Using TextBox controls 287
- 9.3 Button classes 290
- Expanding the PhotoAlbum class 293
Using the new album settings 296
Creating the AlbumEditDlg panel area 298
Using radio buttons 300
Using check box buttons 304
Adding AlbumEditDlg to our main form 310
- 9.4 Recap 313
- 10 List controls 314
- 10.1 List boxes 315
- Creating a list box 315
Handling selected items 322
- 10.2 Multiselection list boxes 325
- Enabling multiple selection 325
Handling the Move Up and Move Down buttons 328
Handling the Remove button 331
- 10.3 Combo boxes 333
- Creating a combo box 333
Handling the selected item 336
- 10.4 Combo box edits 339
- Replacing the photographer control 340
Updating the combo box dynamically 341
- 10.5 Owner-drawn lists 343
- Adding a context menu 344
Setting the item height 346
Drawing the list items 348
- 10.6 Recap 352
- 11 More controls 353
- 11.1 Tab controls 354
- The TabControl class 355
Creating a tab control 356
- 11.2 Tab pages 359
- Creating tab pages dynamically 360
Creating tab pages in Visual Studio 363
- 11.3 Dates and Times 366
- Dates and times 367
Customizing a DateTimePicker control 369
- 11.4 Calendars 372
- Adding a MonthCalendar control 372
Initializing a calendar 374
Handling mouse clicks in a calendar control 376
- 11.5 Recap 381
- 12 A .NET assortment 383
- 12.1 Keyboard events 384
- Handling the KeyPress event 384
Handling other keyboard events 386
- 12.2 Mouse events 387
- The MouseEventArgs class 388
Handling mouse events 388
- 12.3 Image buttons 393
- Implementing Next and Prev buttons 393
Drawing bitmaps for our buttons 399
Placing images on our buttons 402
- 12.4 Icons 405
- Replacing the icon on a form 406
Replacing the application icon 408
- 12.5 Recap 409
- 13 Toolbars and tips 410
- 13.1 Toolbars 411
- The ToolBar class 411
Adding a toolbar 412
The ToolBarButton class 413
- 13.2 Image lists 416
- The ImageList class 416
Creating an image list 417
- 13.3 Toolbar buttons 420
- Adding a push button 420
Adding a dropdown button 424
Adding a toggle button 426
- 13.4 Tool tips 430
- The ToolTip class 431
Creating tool tips 431
- 13.5 Recap 434
Part 3 Advanced Windows Forms 437
- 14 List views 439
- 14.1 The nature of list views 440
- 14.2 The ListView class 443
- Creating the MyAlbumExplorer project 443
Creating a list view 445
Populating a ListView 448
- 14.3 ListView columns 453
- Creating the columns 454
Populating the columns 456
Sorting a column 458
- 14.4 Selection and editing 464
- Supporting item selection 464
Supporting label edits 468
- 14.5 Item activation 472
- Handling item activation 473
Defining new columns 474
Populating the ListView 476
Sorting a column (again) 477
Updating the properties menu 480
Updating label editing 481
Redisplaying the albums 483
- 14.6 Recap 483
- 15 Tree views 485
- 15.1 Tree view basics 486
- 15.2 The TreeView class 486
- Creating a tree view 488
Using the Splitter class 489
Using the TreeNode class 492
- 15.3 Dynamic tree nodes 497
- Assigning index constants 497
Creating the album nodes 498
Creating the photograph nodes 501
- 15.4 Node selection 505
- Supporting node selection 506
Revisiting the list view 509
- 15.5 Fun with tree views 513
- Displaying the photograph 514
Supporting label edits 516
Updating the properties menu 520
- 15.6 Recap 524
- 16 Multiple document interfaces 525
- 16.1 Interface styles 526
- Single document interfaces 526
Explorer interfaces 526
Multiple document interfaces 527
Support in Windows Forms 529
- 16.2 MDI forms 530
- Creating an MDI container form 531
Creating an MDI child form 532
Adding a new entry point 533
- 16.3 Merged menus 535
- Assigning merge types 535
Assigning merge order 537
Opening a child form 541
- 16.4 MDI children 543
- Replacing the toolbar 543
Displaying pixel data 548
Opening an album twice 551
Updating the title bar 553
Revisiting the activation events 556
- 16.5 MDI child window management 557
- Arranging MDI forms 558
Creating an MDI child list 561
- 16.6 Recap 563
- 17 Data binding 564
- 17.1 Data grids 565
- Creating the MyAlbumData project 568
Displaying data in a data grid 569
- 17.2 Data grid customization 573
- Customizing table styles 574
Customizing column styles 576
- 17.3 Editable objects 580
- The IEditableObject interface 580
Supporting the IEditableObject interface 582
Using editable objects 584
- 17.4 Simple data binding 586
- Altering the MyAlbumData application 587
Performing simple binding 590
Updating data bound controls 594
Displaying the image 599
Saving changes to bound controls 601
- 17.5 Recap 602
- 18 Odds and ends .NET 603
- 18.1 Printing 604
- Using the print classes 605
Drawing a print page 607
- 18.2 Timers 611
- Creating a slide show form 612
Implementing the slide show behavior 615
- 18.3 Drag and drop 618
- Initiating drag and drop 620
Receiving drag and drop 622
- 18.4 ActiveX controls 625
- Creating the About box 626
Wrapping the web browser control 629
Using the web browser control 631
- 18.5 Recap 635
A C# primer 637
B .NET namespaces 674
C Visual index 680
D For more information 690
bibliography 692
index 695