
Building User Interfaces in VB.NET
Windows Forms and Custom Controls
By:Â Matthew MacDonald
Paperback | 9 July 2002
At a Glance
628 Pages
22.86 x 17.78 x 3.81
Paperback
RRP $84.99
$83.75
or 4 interest-free payments of $20.94 with
 orÂShips in 10 to 15 business days
| Preface | p. xvii |
| About the Author | p. xix |
| About the Technical Reviewer | p. xxi |
| Acknowledgments | p. xxiii |
| Introduction | p. xxv |
| About This Book | p. xxv |
| Chapter Overview | p. xxviii |
| Creating Usable Interfaces | p. 1 |
| Why Worry About the Interface? | p. 2 |
| A Brief History of User Interfaces | p. 3 |
| The Command-Line Era | p. 3 |
| The Question-Answer Model | p. 5 |
| The Menu-Driven Model | p. 7 |
| The GUI Era | p. 8 |
| Creativity vs. Convention | p. 9 |
| Consistency in .NET | p. 10 |
| The "Act-Like-Microsoft" Principle | p. 11 |
| Administrative Utilities | p. 11 |
| Know Your Application Type | p. 13 |
| Know Your User | p. 13 |
| Handling Complexity | p. 14 |
| Segmenting Information | p. 15 |
| Inductive User Interface | p. 16 |
| Helpful Restrictions | p. 16 |
| Restricting the User's Ability to Make a Mistake | p. 16 |
| Restricting the User's Choices | p. 17 |
| Restricting the User's Imagination | p. 18 |
| Programming User Interface for the Web | p. 19 |
| The Last Word | p. 19 |
| Designing with Classes and Tiers | p. 21 |
| Classes and Objects | p. 22 |
| The Roles of Classes | p. 22 |
| Classes and Types | p. 23 |
| More About Objects | p. 26 |
| User Interface Classes in .NET | p. 26 |
| Controls Are Classes | p. 27 |
| Controls Contain Other Controls | p. 28 |
| Controls Derive from Other Controls | p. 30 |
| Inheritance and the Form Class | p. 32 |
| The Controls Collection | p. 34 |
| Generating Code with Visual Studio .NET | p. 35 |
| Interacting with a Control | p. 37 |
| The View-Mediator Pattern | p. 37 |
| Smart Controls | p. 39 |
| Smart Forms | p. 40 |
| Encapsulation | p. 41 |
| Use Enumerations and Resource Classes | p. 42 |
| Use Collections | p. 42 |
| Restrain from Sharing Control References | p. 42 |
| Define a Data Transfer Plan | p. 42 |
| Use a Central Switchboard | p. 43 |
| Create Data-Driven User Interfaces | p. 43 |
| Developing in Tiers | p. 44 |
| Problems with Three-Tier Design | p. 45 |
| Three-Tier Design Consistency | p. 47 |
| Fixing Three-Tier Design | p. 48 |
| The DataSet to the Rescue | p. 50 |
| Validation and Business Objects | p. 51 |
| Other Types of Application | p. 51 |
| The Last Word | p. 52 |
| Control Class Basics | p. 55 |
| The Windows Forms Package | p. 55 |
| The .NET Solution | p. 56 |
| The Control Class | p. 58 |
| Position and Size | p. 62 |
| Color | p. 64 |
| Fonts and Text | p. 67 |
| Access Keys | p. 68 |
| Control Relations | p. 69 |
| Focus and the Tab Sequence | p. 70 |
| Responding to the Mouse and Keyboard | p. 73 |
| A Mouse/Keyboard Example | p. 76 |
| Mouse Cursors | p. 76 |
| Graphics and Painting | p. 78 |
| Low-Level Members | p. 79 |
| The Last Word | p. 80 |
| Classic Controls | p. 81 |
| Types of Controls | p. 81 |
| Invisible Controls | p. 81 |
| Provider Controls | p. 83 |
| ActiveX Controls | p. 84 |
| Should You Import ActiveX Controls? | p. 86 |
| The Classic Control Gallery | p. 88 |
| Labels | p. 88 |
| LinkLabel | p. 89 |
| Button | p. 91 |
| TextBox | p. 92 |
| CheckBox and RadioButton | p. 94 |
| PictureBox | p. 94 |
| List Controls | p. 95 |
| Other Domain Controls | p. 99 |
| Organizational Controls | p. 102 |
| The Date Controls | p. 102 |
| The DateTimePicker | p. 103 |
| MonthCalendar | p. 106 |
| Menus | p. 108 |
| The Menu Class | p. 110 |
| The MainMenu and ContextMenu Classes | p. 111 |
| The MenuItem Class | p. 112 |
| The Visual Studio .NET Menu Designer | p. 114 |
| Attaching a Menu | p. 116 |
| Menu Events | p. 117 |
| Copying and Cloning a Menu | p. 118 |
| Merging a Menu | p. 118 |
| Owner-Drawn Menus | p. 119 |
| An Owner-Drawn Menu Control | p. 122 |
| Drag-and-Drop | p. 126 |
| "Fake" Drag-and-Drop | p. 126 |
| Authentic Drag-and-Drop | p. 128 |
| Validation | p. 131 |
| A Validation Example | p. 133 |
| Validating with the ErrorProvider | p. 134 |
| Validating with Regular Expressions | p. 136 |
| The Last Word | p. 138 |
| Forms | p. 139 |
| The Form Class | p. 139 |
| Form Size and Position | p. 144 |
| Scrollable Forms | p. 148 |
| Showing a Form | p. 149 |
| Custom Dialog Windows | p. 150 |
| IgnoreForm Interaction | p. 153 |
| Form Ownership | p. 156 |
| Windows XP Styles | p. 158 |
| Prebuilt Dialogs | p. 160 |
| Resizable Forms | p. 165 |
| The Problem of Size | p. 165 |
| A Traditional Solution | p. 166 |
| Minimum and Maximum Size | p. 169 |
| Anchoring | p. 170 |
| Docking | p. 174 |
| Splitting Windows | p. 176 |
| Docking with Panels | p. 177 |
| Other Split Windows | p. 179 |
| Irregularly Shaped Forms | p. 183 |
| Shaped Form Content | p. 185 |
| Moving Shaped Forms | p. 187 |
| Forms with Holes | p. 189 |
| Visual Inheritance | p. 190 |
| Making an Ancestor Control Available | p. 192 |
| Adding an Ancestor Property | p. 192 |
| Overriding an Event Handler | p. 193 |
| The Last Word | p. 195 |
| Modern Controls | p. 197 |
| The ImageList | p. 197 |
| Dealing with the ImageList in Code | p. 199 |
| ListView and TreeView | p. 201 |
| Basic ListView | p. 202 |
| Advanced ListView Tricks | p. 208 |
| Label Editing | p. 212 |
| Adding Information to a ListView | p. 213 |
| Basic TreeView | p. 213 |
| TreeView Structure | p. 214 |
| TreeView Navigation | p. 216 |
| Manipulating Nodes | p. 219 |
| Selecting Nodes | p. 222 |
| Advanced TreeView Tricks | p. 224 |
| Node Pictures | p. 225 |
| Expanding and Collapsing Levels | p. 226 |
| TreeView Drag-and-Drop | p. 227 |
| Taming the TreeView | p. 231 |
| A Project Tree | p. 231 |
| A Data-Aware TreeView | p. 233 |
| Unusual Trees | p. 235 |
| Design-Time Support for the Custom TreeView | p. 236 |
| The ToolBar | p. 237 |
| Synchronizing the ToolBar | p. 241 |
| The StatusBar | p. 245 |
| Basic StatusBar | p. 246 |
| Synchronizing the StatusBar to a Menu | p. 248 |
| The TabControl | p. 250 |
| The NotifyIcon | p. 252 |
| The Last Word | p. 253 |
| Custom Controls | p. 255 |
| Types of Custom Controls | p. 256 |
| User Controls | p. 256 |
| Creating User Controls | p. 257 |
| The Progress User Control | p. 259 |
| The Bitmap Thumbnail Viewer | p. 264 |
| Testing the BitmapViewer | p. 270 |
| BitmapViewer Events | p. 270 |
| BitmapViewer Enhancements and Threading | p. 272 |
| Inherited Controls | p. 275 |
| Inherited Controls or User Controls? | p. 276 |
| The DirectoryTree Control | p. 276 |
| Testing the DirectoryTree | p. 279 |
| A Masked TextBox Control | p. 280 |
| Custom Extender Providers | p. 283 |
| The Menu Text Provider | p. 284 |
| The Help Icon Provider | p. 288 |
| The Last Word | p. 291 |
| Design-Time Support for Custom Controls | p. 293 |
| Control Projects | p. 294 |
| The Class Library Project | p. 294 |
| Referencing a Custom Control | p. 296 |
| The GAC | p. 298 |
| Control Designer Basics | p. 300 |
| Attributes | p. 300 |
| Basic Serialization | p. 305 |
| The Toolbox Bitmap | p. 306 |
| Resource Files | p. 308 |
| Testing Custom Controls | p. 312 |
| Debugging Design-Time Support | p. 313 |
| Testing for Design Mode | p. 314 |
| The PropertyGrid Control | p. 315 |
| Custom Designers | p. 316 |
| Filtering Properties and Events | p. 318 |
| Designer Verbs | p. 319 |
| Control Designer Notifications | p. 325 |
| Data Types and UITypeEditors | p. 326 |
| Using Prebuilt UITypeEditors | p. 328 |
| Custom UITypeEditors | p. 330 |
| Licensing Custom Controls | p. 332 |
| Simple LIC File Licensing | p. 332 |
| Custom LIC File Licensing | p. 334 |
| Advanced License Providers | p. 334 |
| The Last Word | p. 337 |
| Data Controls | p. 339 |
| Introducing Data Binding | p. 339 |
| Basic Data Binding | p. 340 |
| Simple List Binding | p. 342 |
| Binding Lists to Complex Objects | p. 343 |
| Single-Value Binding | p. 346 |
| ADO.NET Data Binding | p. 349 |
| Multiple Control Binding | p. 353 |
| Updating with Data Binding | p. 354 |
| Formatting Data Before Binding | p. 356 |
| Advanced Conversions | p. 359 |
| Row Validation and Changes | p. 362 |
| Data Binding Exposed | p. 363 |
| Navigation with Data Binding | p. 364 |
| Reacting to Record Navigation | p. 366 |
| Creating Master-Detail Forms | p. 367 |
| Creating a New Binding Context | p. 369 |
| The DataGrid Control | p. 370 |
| DataGrid Relations | p. 371 |
| DataGrid Column Mapping | p. 372 |
| Creating Custom DataGrid Column Styles | p. 373 |
| Encapsulation with Data Controls | p. 377 |
| Validating Bound Data | p. 378 |
| Data-Aware Controls | p. 380 |
| A Decoupled TreeView with Just-in-Time Nodes | p. 382 |
| Can There Be a Data-Bound ListView Control? | p. 387 |
| The Last Word | p. 387 |
| MDI Interfaces and Workspaces | p. 389 |
| The Story of MDI | p. 389 |
| Types of MDI Applications | p. 390 |
| MDI Essentials | p. 390 |
| Finding Your Relatives | p. 392 |
| Synchronizing MDI Children | p. 393 |
| MDI Layout | p. 395 |
| Merging Menus | p. 396 |
| Managing Interface State | p. 399 |
| Document-View Architecture | p. 401 |
| A Document-View Ordering Program | p. 402 |
| Floating Windows and Docking | p. 415 |
| Floating Toolbars | p. 415 |
| Dockable Windows | p. 418 |
| The Last Word | p. 424 |
| Dynamic User Interface | p. 425 |
| The Case for Dynamic User Interface | p. 425 |
| Creating Controls at Runtime | p. 426 |
| A System Tray Application | p. 428 |
| Using Controls in a Drawing Program | p. 432 |
| Dynamic Content | p. 438 |
| Localization | p. 439 |
| A Dynamic Menu Example | p. 442 |
| Data-Driven Programming | p. 446 |
| A Data-Driven Pricing Application | p. 446 |
| Control Layout Engines | p. 448 |
| The SingleLineFlow Layout Manager | p. 449 |
| Control Layout Engines As Extender Providers | p. 452 |
| The Last Word | p. 452 |
| GDI+ Basics | p. 455 |
| Paint Sessions with GDI+ | p. 456 |
| Accessing the Graphics Object | p. 456 |
| Painting and Refreshing | p. 457 |
| Optimizing GDI+ Painting | p. 460 |
| Painting and Resizing | p. 460 |
| Painting Portions of a Window | p. 462 |
| Rendering Mode and Antialiasing | p. 465 |
| Double Buffering | p. 467 |
| Painting and Debugging | p. 470 |
| The Graphics Class | p. 471 |
| Coordinate Systems and Transformations | p. 476 |
| Pens | p. 479 |
| Brushes | p. 482 |
| Hit Testing | p. 485 |
| Hit Testing Nonrectangular Shapes | p. 487 |
| The ControlPaint Class | p. 488 |
| The Last Word | p. 490 |
| GDI+ Controls | p. 491 |
| Simple GDI+ Controls | p. 491 |
| A Gradient Label | p. 492 |
| Improving the GradientLabel's Design-Time Support | p. 495 |
| A Marquee Label | p. 498 |
| Creating Button Controls | p. 501 |
| A Hot Tracking Button | p. 502 |
| Reconsidering the Vector Drawing Program | p. 507 |
| Solving the Bounding Problem | p. 508 |
| A Simple Graphing Control | p. 513 |
| The Last Word | p. 517 |
| Help and Application-Embedded Support | p. 519 |
| The Case for Help | p. 519 |
| Types of Help | p. 520 |
| WinHelp | p. 520 |
| WinHelp 95 | p. 521 |
| HTML Help | p. 522 |
| MS Help 2 | p. 524 |
| Some Help Authoring Tools | p. 525 |
| Classic Bad Help | p. 526 |
| Basic Help with the HelpProvider | p. 527 |
| Control-Based and Form-Based Help | p. 531 |
| Invoking Help Programmatically | p. 532 |
| Help Without the HelpProvider | p. 533 |
| Using Database-Based Help | p. 534 |
| Using Task-Based Help | p. 535 |
| Creating Your Own Help | p. 537 |
| Application-Embedded Support | p. 539 |
| Affordances | p. 540 |
| Agents | p. 541 |
| The Last Word | p. 547 |
| Index | p. 549 |
| Table of Contents provided by Syndetics. All Rights Reserved. |
ISBN: 9781590590447
ISBN-10: 1590590449
Series: Net Developer Series
Published: 9th July 2002
Format: Paperback
Language: English
Number of Pages: 628
Audience: General Adult
Publisher: Springer Nature B.V.
Country of Publication: US
Dimensions (cm): 22.86 x 17.78 x 3.81
Weight (kg): 1.06
Shipping
| Standard Shipping | Express Shipping | |
|---|---|---|
| Metro postcodes: | $9.99 | $14.95 |
| Regional postcodes: | $9.99 | $14.95 |
| Rural postcodes: | $9.99 | $14.95 |
Orders over $79.00 qualify for free shipping.
How to return your order
At Booktopia, we offer hassle-free returns in accordance with our returns policy. If you wish to return an item, please get in touch with Booktopia Customer Care.
Additional postage charges may be applicable.
Defective items
If there is a problem with any of the items received for your order then the Booktopia Customer Care team is ready to assist you.
For more info please visit our Help Centre.
You Can Find This Book In

Building iPhone Apps with HTML, CSS, and JavaScript
Making App Store Apps without Objective-C or Cocoa
Paperback
RRP $57.00
$30.75
OFF
This product is categorised by
- Non-FictionComputing & I.T.Operating Systems
- Non-FictionComputing & I.T.Computer Programming & Software DevelopmentObject-Oriented Programming or OOP
- Non-FictionComputing & I.T.Computer Programming & Software DevelopmentWeb Programming
- Non-FictionComputing & I.T.Computer Programming & Software DevelopmentSoftware Engineering
- Non-FictionComputing & I.T.Computer Programming & Software DevelopmentProgramming & Scripting Languages
- Non-FictionComputing & I.T.Computer Programming & Software DevelopmentMicrosoft Programming
- Non-FictionComputing & I.T.Computer HardwarePersonal Computers























