■CONTENTS
xvii
■CHAPTER 17 The WebBrowser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
WebBrowser Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
Navigating to a Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
WebBrowser Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
A WebBrowser Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Printing, Saving, and Fine-Tuning. . . . . . . . . . . . . . . . . . . . . . . . . . . 599
Blending Web and Windows Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . 601
Build a DOM Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
Extract All Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
Scripting a Web Page with .NET Code . . . . . . . . . . . . . . . . . . . . . . . 606
Scripting an HTML Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611
PART 4 ■ ■ ■ Windows Forms Techniques
■CHAPTER 18 Validation and Masked Editing . . . . . . . . . . . . . . . . . . . . . . . . . . 615
Validating at the Right Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
Validation Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
The Validation Event Sequence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
Handling Validation Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Closing a Form with Validating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620
The ErrorProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
Showing Error Icons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
Customizing Error Icons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
Regular Expression Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
Validating with Regular Expressions. . . . . . . . . . . . . . . . . . . . . . . . . 628
Custom Validation Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
Understanding the ASP.NET Validation Controls . . . . . . . . . . . . . . . 630
Building the BaseValidator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
Building Three Custom Validators. . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Using the Custom Validators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
Masked Edit Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
Creating a Mask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
The MaskedTextBox Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
MaskedTextBox Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Registering a Custom Mask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
Creating Custom Masked Controls . . . . . . . . . . . . . . . . . . . . . . . . . . 650
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654