
User Interfaces in C#
Windows Forms and Custom Controls
By:Â Matthew MacDonald
Paperback | 17 September 2004
At a Glance
630 Pages
22.86 x 18.42 x 3.18
New Edition
Paperback
RRP $109.00
$106.75
or 4 interest-free payments of $26.69 with
 orÂShips in 5 to 7 business days
Industry Reviews
From the reviews:
"This book goes beyond simply covering the Windows Forms namespaces - it also provides a careful treatment of the API and a discussion of good user interface design principles. ... After reading this book, you will know how to design state-of-the-art application interfaces ... and more. ... the book does contain detailed discussions about every well-known user interface element. ... tips are very useful to novice C# or .Net users. I recommend this book to anyone serious about building interfaces using the .Net framework." (Adrian Rossi, Computer Bulletin, November, 2003)
"This book contains the following: An overview of how to design elegant user interfaces the average user can understand. A comprehensive examination of the user interface controls and classes in .NET. Best practices and design tips for coding user interfaces and integrating help." (Programmers Heaven, November, 2002)
| Preface | p. xvii |
| About the Author | p. xix |
| About the Technical Reviewer | p. xx |
| Acknowledgments | p. xxi |
| Introduction | p. xxiii |
| 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. 10 |
| Consistency in .NET | p. 11 |
| The ""Act-Like-Microsoft"" Principle | p. 11 |
| Administrative Utilities | p. 12 |
| Know Your Application Type | p. 13 |
| Know Your User | p. 14 |
| Handling Complexity | p. 15 |
| Segmenting Information | p. 16 |
| Inductive User Interface | p. 17 |
| Helpful Restrictions | p. 17 |
| Restricting the User's Ability to Make a Mistake | p. 17 |
| Restricting the User's Choices | p. 18 |
| Restricting the User's Imagination | p. 19 |
| Programming User Interface for the Web | p. 20 |
| The Last Word | p. 21 |
| Designing with Classes and Tiers | p. 23 |
| Classes and Objects | p. 24 |
| The Roles of Classes | p. 24 |
| Classes and Types | p. 25 |
| More About Objects | p. 28 |
| User Interface Classes in .NET | p. 29 |
| Controls Are Classes | p. 29 |
| Controls Contain Other Controls | p. 30 |
| Controls Derive from Other Controls | p. 33 |
| Inheritance and the Form Class | p. 35 |
| The Controls Collection | p. 36 |
| Generating Code with Visual Studio .NET | p. 37 |
| Interacting with a Control | p. 39 |
| The View-Mediator Pattern | p. 40 |
| Smart Controls | p. 42 |
| Smart Forms | p. 43 |
| Encapsulation | p. 44 |
| Use Enumerations and Resource Classes | p. 44 |
| Use Collections | p. 45 |
| Restrain from Sharing Control References | p. 45 |
| Define a Data Transfer Plan | p. 45 |
| Use a Central Switchboard | p. 45 |
| Create Data-Driven User Interfaces | p. 46 |
| Developing in Tiers | p. 47 |
| Problems with Three-Tier Design | p. 48 |
| Three-Tier Design Consistency | p. 50 |
| Fixing Three-Tier Design | p. 51 |
| Using the DataSet | p. 52 |
| Other Types of Application | p. 54 |
| The Last Word | p. 54 |
| Control Class Basics | p. 57 |
| The Windows Forms Package | p. 57 |
| The .NET Solution | p. 58 |
| The Control Class | p. 60 |
| Position and Size | p. 64 |
| Color | p. 66 |
| Fonts and Text | p. 69 |
| Access Keys | p. 71 |
| Control Relations | p. 71 |
| Focus and the Tab Sequence | p. 72 |
| Responding to the Mouse and Keyboard | p. 75 |
| A Mouse/Keyboard Example | p. 78 |
| Mouse Cursors | p. 79 |
| Graphics and Painting | p. 79 |
| Low-Level Members | p. 81 |
| The Last Word | p. 82 |
| Classic Controls | p. 83 |
| Types of Controls | p. 83 |
| Invisible Controls | p. 83 |
| Provider Controls | p. 85 |
| ActiveX Controls | p. 86 |
| Should You Import ActiveX Controls? | p. 89 |
| The Classic Control Gallery | p. 90 |
| Labels | p. 90 |
| LinkLabel | p. 91 |
| Button | p. 94 |
| TextBox | p. 94 |
| CheckBox and RadioButton | p. 96 |
| PictureBox | p. 97 |
| List Controls | p. 97 |
| Other Domain Controls | p. 102 |
| Organizational Controls | p. 104 |
| The Date Controls | p. 105 |
| The DateTimePicker | p. 106 |
| MonthCalendar | p. 108 |
| Menus | p. 111 |
| The Menu Class | p. 112 |
| The MainMenu and ContextMenu Classes | p. 114 |
| The Menultem Class | p. 115 |
| The Visual Studio .NET Menu Designer | p. 118 |
| Attaching a Menu | p. 118 |
| Menu Events | p. 119 |
| Copying and Cloning a Menu | p. 121 |
| Merging a Menu | p. 121 |
| Owner-Drawn Menus | p. 122 |
| An Owner-Drawn Menu Control | p. 125 |
| Drag-and-Drop | p. 130 |
| ""Fake"" Drag-and-Drop | p. 130 |
| Authentic Drag-and-Drop | p. 132 |
| Validation | p. 135 |
| A Validation Example | p. 136 |
| Validating with the ErrorProvider | p. 138 |
| Validating with Regular Expressions | p. 140 |
| The Last Word | p. 142 |
| Forms | p. 143 |
| The Form Class | p. 143 |
| Form Size and Position | p. 148 |
| Scrollable Forms | p. 152 |
| Showing a Form | p. 154 |
| Custom Dialog Windows | p. 155 |
| Form Interaction | p. 158 |
| Form Ownership | p. 161 |
| Windows XP Styles | p. 163 |
| Prebuilt Dialogs | p. 165 |
| Resizable Forms | p. 171 |
| The Problem of Size | p. 171 |
| Minimum and Maximum Size | p. 172 |
| Anchoring | p. 173 |
| Docking | p. 177 |
| Splitting Windows | p. 180 |
| Docking with Panels | p. 181 |
| Other Split Windows | p. 183 |
| Irregularly Shaped Forms | p. 186 |
| Shaped Form Content | p. 188 |
| Moving Shaped Forms | p. 190 |
| Forms with Holes | p. 192 |
| Visual Inheritance | p. 193 |
| Making an Ancestor Control Available | p. 195 |
| Adding an Ancestor Property | p. 196 |
| Overriding an Event Handler | p. 197 |
| The Last Word | p. 199 |
| Modern Controls | p. 201 |
| The ImageList | p. 201 |
| Dealing with the ImageList in Code | p. 203 |
| ListView and TreeView | p. 205 |
| Basic ListView | p. 206 |
| Advanced ListView Tricks | p. 211 |
| Label Editing | p. 215 |
| Adding Information to a ListView | p. 216 |
| Basic TreeView | p. 217 |
| TreeView Structure | p. 218 |
| TreeView Navigation | p. 219 |
| Manipulating Nodes | p. 223 |
| Selecting Nodes | p. 226 |
| Advanced TreeView Tricks | p. 228 |
| Node Pictures | p. 229 |
| Expanding and Collapsing Levels | p. 230 |
| TreeView Drag-and-Drop | p. 231 |
| Taming the TreeView | p. 235 |
| A Project Tree | p. 235 |
| A Data-Aware TreeView | p. 238 |
| Unusual Trees | p. 240 |
| Design-Time Support for the Custom TreeView | p. 241 |
| The ToolBar | p. 242 |
| Synchronizing the ToolBar | p. 246 |
| The StatusBar | p. 249 |
| Basic StatusBar | p. 250 |
| Synchronizing the StatusBar to a Menu | p. 252 |
| The TabControl | p. 254 |
| The NotifyIcon | p. 257 |
| The Last Word | p. 258 |
| Custom Controls | p. 259 |
| Types of Custom Controls | p. 260 |
| Control Projects | p. 261 |
| The Class Library Project | p. 261 |
| Referencing a Custom Control | p. 263 |
| The GAC | p. 265 |
| Creating User Controls | p. 269 |
| The Progress User Control | p. 271 |
| The Bitmap Thumbnail Viewer | p. 276 |
| Testing the BitmapViewer | p. 283 |
| Bit map Viewer Events | p. 284 |
| Bit map Viewer Enhancements and Threading | p. 286 |
| Inherited Controls | p. 289 |
| Inherited Controls or User Controls? | p. 290 |
| The DirectoryTree Control | p. 291 |
| Testing the DirectoryTree | p. 293 |
| A Masked TextBox Control | p. 294 |
| Custom Extender Providers | p. 298 |
| The Menu Text Provider | p. 298 |
| The Help Icon Provider | p. 303 |
| The Last Word | p. 307 |
| Design-Time Support for Custom Controls | p. 309 |
| Control Designer Basics | p. 310 |
| Attributes | p. 310 |
| Basic Serialization | p. 314 |
| The Toolbox Bitmap | p. 316 |
| Resource Files | p. 318 |
| Testing Custom Controls | p. 321 |
| Debugging Design-Time Support | p. 322 |
| Testing for Design Mode | p. 323 |
| The PropertyGrid Control | p. 325 |
| Custom Designers | p. 326 |
| Filtering Properties and Events | p. 327 |
| Designer Verbs | p. 329 |
| Control Designer Notifications | p. 334 |
| Data Types and UITypeEditors | p. 335 |
| Using Prebuilt UITypeEditors | p. 337 |
| Custom UITypeEditors | p. 339 |
| Licensing Custom Controls | p. 341 |
| Simple LIC File Licensing | p. 341 |
| Custom LIC File Licensing | p. 342 |
| Advanced License Providers | p. 343 |
| The Last Word | p. 346 |
| Data Controls | p. 349 |
| Introducing Data Binding | p. 349 |
| Basic Data Binding | p. 350 |
| Simple List Binding | p. 352 |
| Binding Lists to Complex Objects | p. 353 |
| Single-Value Binding | p. 357 |
| ADO.NET Data Binding | p. 360 |
| Multiple Control Binding | p. 363 |
| Updating with Data Binding | p. 365 |
| Formatting Data Before Binding | p. 367 |
| Advanced Conversions | p. 370 |
| Row Validation and Changes | p. 372 |
| Data Binding Exposed | p. 373 |
| Navigation with Data Binding | p. 374 |
| Reacting to Record Navigation | p. 376 |
| Creating Master-Detail Forms | p. 377 |
| Creating a New Binding Context | p. 379 |
| The DataGrid Control | p. 380 |
| DataGrid Relations | p. 381 |
| DataGrid Column Mapping | p. 382 |
| Creating Custom DataGrid Column Styles | p. 383 |
| Encapsulation with Data Controls | p. 387 |
| Validating Bound Data | p. 388 |
| Data-Aware Controls | p. 391 |
| A Decoupled TreeView with Just-in-Time Nodes | p. 393 |
| Can There Be a Data-Bound ListView Control? | p. 397 |
| The Last Word | p. 398 |
| MDI Interfaces and Workspaces | p. 399 |
| The Story of MDI | p. 399 |
| Types of MDI Applications | p. 400 |
| MDI Essentials | p. 400 |
| Finding Your Relatives | p. 402 |
| Synchronizing MDI Children | p. 403 |
| MDI Layout | p. 405 |
| Merging Menus | p. 407 |
| Managing Interface State | p. 408 |
| Document-View Architecture | p. 410 |
| A Document-View Ordering Program | p. 411 |
| Floating Windows and Docking | p. 425 |
| Floating Toolbars | p. 425 |
| Dockable Windows | p. 429 |
| The Last Word | p. 434 |
| Dynamic User Interface | p. 435 |
| The Case for Dynamic User Interface | p. 435 |
| Creating Controls at Runtime | p. 436 |
| A System Tray Application | p. 438 |
| Using Controls in a Drawing Program | p. 443 |
| Dynamic Content | p. 449 |
| Localization | p. 450 |
| A Dynamic Menu Example | p. 453 |
| Data-Driven Programming | p. 457 |
| A Data-Driven Pricing Application | p. 458 |
| Control Layout Engines | p. 459 |
| The SingleLineFlow Layout Manager | p. 460 |
| Control Layout Engines As Extender Providers | p. 463 |
| The Last Word | p. 464 |
| GDI+ Basics | p. 465 |
| Paint Sessions with GDI+ | p. 466 |
| Accessing the Graphics Object | p. 466 |
| Painting and Refreshing | p. 467 |
| Optimizing GDI+ Painting | p. 470 |
| Painting and Resizing | p. 470 |
| Painting Portions of a Window | p. 472 |
| Rendering Mode and Antialiasing | p. 475 |
| Double Buffering | p. 477 |
| Painting and Debugging | p. 480 |
| The Graphics Class | p. 481 |
| Coordinate Systems and Transformations | p. 485 |
| Pens | p. 488 |
| Brushes | p. 490 |
| Hit Testing | p. 494 |
| Hit Testing Nonrectangular Shapes | p. 496 |
| The ControlPaint Class | p. 498 |
| The Last Word | p. 500 |
| GDI+ Controls | p. 501 |
| Simple GDI+ Controls | p. 501 |
| A Gradient Label | p. 502 |
| Improving the GradientLabel's Design-Time Support | p. 505 |
| A Marquee Label | p. 509 |
| Creating Button Controls | p. 512 |
| A Hot Tracking Button | p. 512 |
| Reconsidering the Vector Drawing Program | p. 519 |
| Solving the Bounding Problem | p. 520 |
| A Simple Graphing Control | p. 525 |
| The Last Word | p. 530 |
| Help and Application-Embedded Support | p. 531 |
| The Case for Help | p. 531 |
| Types of Help | p. 532 |
| WinHelp | p. 532 |
| WinHelp 95 | p. 533 |
| HTML Help | p. 534 |
| MS Help 2 | p. 535 |
| Some Help Authoring Tools | p. 536 |
| Classic Bad Help | p. 537 |
| Basic Help with the HelpProvider | p. 539 |
| Control-Based and Form-Based Help | p. 542 |
| Invoking Help Programmatically | p. 543 |
| Help Without the HelpProvider | p. 544 |
| Using Database-Based Help | p. 545 |
| Using Task-Based Help | p. 546 |
| Creating Your Own Help | p. 548 |
| Application-Embedded Support | p. 550 |
| Affordances | p. 551 |
| Agents | p. 553 |
| The Last Word | p. 559 |
| Index | p. 561 |
| Table of Contents provided by Publisher. All Rights Reserved. |
ISBN: 9781590590454
ISBN-10: 1590590457
Series: .Net Developer Series
Published: 17th September 2004
Format: Paperback
Language: English
Number of Pages: 630
Audience: General Adult
Publisher: Springer Nature B.V.
Country of Publication: US
Dimensions (cm): 22.86 x 18.42 x 3.18
Weight (kg): 1.23
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
$22.00
OFF
This product is categorised by
- Non-FictionComputing & I.T.Computer HardwarePersonal Computers
- Non-FictionComputing & I.T.Computer Programming & Software DevelopmentObject-Oriented Programming or OOP
- Non-FictionComputing & I.T.Computer Programming & Software DevelopmentProgramming & Scripting Languages
- Non-FictionComputing & I.T.Operating SystemsMicrosoft (Windows) Operating Systems
- Non-FictionComputing & I.T.Digital Lifestyle & Online World: Consumer & User GuidesInternet Guides & Online Services
- Non-FictionComputing & I.T.Computer Programming & Software DevelopmentMicrosoft Programming
- Non-FictionComputing & I.T.Computer Programming & Software DevelopmentSoftware Engineering























