1. Trang chủ
  2. » Công Nghệ Thông Tin

Tự học lập trình Csharp Dương Quang Thiện tập 3

683 1,3K 15

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 683
Dung lượng 4,29 MB

Nội dung

Cuối cùng, tập III này cũng không trình bày môi trường triển khai Visual Studio .NET IDE mà bạn sẽ làm việc trong việc thiết kế giao diện người sử dụng.. Chương 1 Tạo giao diện người sử

Trang 2

GIAO DIỆN NGƯỜI DÙNG

theo C#

Lập trình Visual C# thế nào?

Trang 5

Mục Lục

Lời mở đầu ……… 17

Chương 1 Tạo giao diện người sử dụng có thể dùng lại được 1.1 Tại sao phải bận tâm về giao diện? 28

1.2 Một chút ít lịch sử về giao diện? 29

1.2.1 Lĩnh vực Command-Line 29

1.2.2 Mô hình Hỏi-Đáp 31

1.2.2.1 Hỏi những gì mà người sử dụng có thể trả lời 32

1.2.2.2 Giới hạn vào một công tác đơn độc 33

1.2.2.3 Nên để ý đến việc gò theo những sở thích của bạn 33

1.2.3 Mô hình vận hành theo trình đơn 33

1.2.4 Lĩnh vực GUI 34

1.3 Sáng tạo so với Qui ước 36

1.3.1 Tính nhất quán trên NET 36

1.3.2 Nguyên tắc “Hành động giống như Microsoft” 37

1.3.3 Các trình tiện ích hành chánh 37

1.3.4 Hiểu thấu loại ứng dụng của bạn 39

1.3.5 Hiểu thấu người sử dụng của bạn 40

1.4 Thụ lý sự phức tạp 41

1.4.1 Phân đoạn thông tin 41

1.4.2 Giao diện qui nạp 42

1.5 Các hạn chế hữu ích 42

1.5.1 Hạn chế khả năng người sử dụng phạm sai lầm 42

1.5.2 Hạn chế những lựa chọn của người sử dụng 43

1.5.3 Hạn chế trí tưởng tượng của người sử dụng 44

Chương 2 Thiết kế giao diện theo Lớp và Tầng nấc 2.1 Các lớp và đối tượng 47

2.1.1 Vai trò của lớp 47

2.1.2 Lớp và kiểu dữ liệu 48

2.1.2.1 Các cấu trúc (struct) 48

Trang 6

2.1.2.2 Các lớp 49

2.1.2.3 Delegates 50

2.1.2.4 Enumerations 50

2.1.2.5 Interfaces 51

2.2 Các lớp giao diện GUI trên NET 52

2.2.1 Các ô control là những lớp 52

2.2.2 Ô control chứa các ô control khác 53

2.2.3 Ô control được dẫn xuất từ các ô control khác 55

2.2.4 Tính kế thừa và lớp Form 57

2.2.5 Collection Controls 58

2.2.6 Kết sinh đoạn mã với Visual Studio NET 59

2.3 Tương tác với một ô control 61

2.3.1 View-Mediator Pattern 62

2.3.2 Các ô control thông minh 63

2.3.3 Các biểu mẫu thông minh 64

2.4 Tính gói ghém (encapsulation) 65

2.4.1 Sử dụng Enumeration và Resource Class 66

2.4.2 Sử dụng các collection 66

2.4.3 Hạn chế chia sẻ sử dụng những qui chiếu về ô control 67

2.4.4 Định nghĩa một kế hoạch chuyển dữ liệu 67

2.4.5 Sử dụng một tổng đài trung tâm 67

2.4.6 Tạo giao diện GUI vận hành theo dữ liệu (data-driven) 68

2.5 Triển khai thiết kế kiểu tam tầng 68

2.5.1 Các vấn đề gặp phải trong việc thiết kế kiểu tam tầng 70

2.5.1.1 Presentation tier 70

2.5.1.2 Business tier 70

2.5.1.3 Data tier 71

2.5.2 Tính nhất quán của thiết kế tam tầng 72

2.6 Sửa chữa thiết kế tam tầng 72

2.6.1 Sử dụng đến DataSet 74

2.6.2 Các đối tượng kiểm tra hợp lệ và đối tượng business 75

2.6.3 Các loại ứng dụng khác 75

Chương 3 Tìm hiểu đồ họa và GDI+ 3.1 Thử lướt xem các GDI+ Namespace 78

3.2 Cấu hình một GDI+ Project Workspace 78

Trang 7

3.3 Tổng quan về namespace System.Drawing 79

3.4 Thử xem những lớp tiện ích của System.Drawing 81

3.4.1 Kiểu dữ liệu Point(F) 82

3.4.2 Kiểu dữ liệu Rectangle(F) 83

3.4.3 Kiểu dữ liệu Size(F) 84

3.4.4 Lớp Region 84

3.5 Tìm hiểu các chầu tô vẽ với GDI+ 85

3.5.1 Truy cập đối tượng Graphics 86

3.5.2 Làm cho “dơ dáy” vùng client area 89

3.5.3 Tối ưu hóa GDI+ Painting 89

3.5.3.1 Tô vẽ và chỉnh lại kích thước (resizing) 90

3.5.3.2 Tô vẽ từng phần nhỏ của một cửa sổ 91

3.5.3.3 Chế độ tô vẽ và vẽ mượt mà (antialiasing) 94

3.5.3.4 Double Buffering 97

3.5.4 Cho tô vẽ các đối tượng GDI+ nằm ngoài các hàm thụ lý Paint 100

3.6 Tìm hiểu lớp Graphics 102

3.7 Hệ thống tọa độ mặc nhiên của GDI+ 106

3.7.1 Khai báo một đơn vị đo lường thay thế 107

3.7.2 Khai báo một điểm gốc thay thế 108

3.8 Thiết lập một Active Color 111

3.8.1 Thử khảo sát lớp ColorDialog 112

3.9 Thao tác phông chữ 114

3.9.1 Làm việc với Font Family 114

3.9.2 Tìm hiểu Font Metrics 116

3.9.3 Xây dựng một ứng dụng phông chữ 117

3.9.4 Liệt kê các phông chữ được cài đặt 119

3.9.5 Lớp FontDialog 122

3.10 Khảo sát System.Drawing.Drawing2D 124

3.10.1 Thiết lập chất lượng vẽ 125

3.10.2 Làm việc với Pen 126

3.10.3 Làm việc với Pen Caps 130

3.10.4 Làm việc với Solid Brush 131

3.10.5 Làm việc với Hatch Style Brush 133

3.10.6 Làm việc với Textured Brush 136

3.10.7 Làm việc với Gradient Brush 137

3.11 Vẽ hình ảnh 139

Trang 8

3.12 Dragging, Hit testing & PictureBox Control 141

3.12.1 Thêm chi tiết về Hit Testing 144

3.12.2 Hit Testing đối với các hình ảnh không phải là hình chữ nhật 146

3.13 Lớp ControlPaint 149

3.14 Tìm hiểu NET Resource Format 151

3.15 Namespace System.Resources 152

3.15.1 Tạo một tập tin *.resx theo lập trình 152

3.15.2 Đọc một tập tin *.resx theo lập trình 154

3.15.3 Xây dựng tập tin *.resources 155

3.15.4 Gắn kết tập tin *.resources vào assembly 156

3.16 Làm việc với ResourceWriters 156

3.17 Làm việc với ResourceManagers 158

3.18 Tự động cấu hình resource theo Visual Studio NET 159

Chương 4 Tìm hiểu về biểu mẫu và lớp Form

4.1 Tìm hiểu lớp Form 162

4.1.1 Kích thước và Vị trí của biểu mẫu 166

4.1.2 Các biểu mẫu diễu hành được 169

4.1.3 Cho hiển thị biểu mẫu 170

4.1.4 Khung đối thoại “cây nhà lá vườn” (custom dialog) 172

4.1.5 Tương tác với biểu mẫu 174

4.2 Các khung đối thoại tạo sẵn 179

4.3 Các biểu mẫu thay đổi được kích thước 183

4.3.1 Vấn đề kích thước 183

4.3.2 Kích thước tối thiểu và tối đa 184

4.3.3 Neo đậu (anchoring) 184

4.3.3.1 Chỉnh kích thuớc các ô control dùng kỹ thuật neo đậu 185

4.3.3.2 Các ô control container với vấn đề neo đậu 186

4.3.4 Cập bến (docking) 187

4.4 Cửa sổ chẻ nhỏ 188

4.4.1 Cập bến sử dụng đến ô control Panel 190

4.4.2 Các cửa sổ chẻ khác 192

Trang 9

4.5 Biểu mẫu với hình dáng bất thường 195

4.5.2 Di chuyển các shaped form 204

4.6 Visual Inheritance 210

4.6.1 Tạo sẵn một ancestor control 212

4.6.2 Thêm một thuộc tính tiền bối 212

4.6.3 Phủ quyết một hàm thụ lý tình huống 213

Chương 5 Cơ bản về lớp Control 5.1 Windows Forms Package 218

5.1.1 Giải pháp NET 219

5.2 Lớp Control 220

5.3 Vị trí và Kích thước 224

5.4 Màu sắc trên ô control 226

5.5 Font và Text đối với ô control 228

5.5.1 Access Keys 232

5.6 Các mối liên hệ trên các ô Control 232

5.7 Focus và Tab Sequence trên ô control 233

5.8 Phản ứng của ô control trước click chuột và phím gõ 236

5.8.1 Một thí dụ Mouse/Keyboard 238

5.8.2 Con nháy chuột (mouse cursors) 240

5.9 Đồ họa và việc tô vẽ 241

5.10 Các thành viên cấp thấp 243

Chương 6 Tìm hiểu về Windows Form Control 6.1 Tìm hiểu Windows Forms Control Hierarchy 244

6.2 Các loại ô control 245

Trang 10

6.2.1 Các ô control vô hình 246

6.2.2 Các ô control provider 247

6.2.3 ActiveX Control 248

6.2.3.1 Bạn có nên nhập ActiveX control hay không? 251

6.3 Thêm các ô control lên biểu mẫu 252

6.3.1 Thêm bằng tay 252

6.3.1.1 Lớp Control$ControlCollection 253

6.3.2 Thêm các ô control lên biểu mẫu theo VS NET IDE 255

6.4 Gallery các ô control cổ điển 257

6.4.1 Label Control 257

6.4.2 LinkLabel Control 258

6.4.3 TextBox Control 260

6.4.3.1 Một thí dụ ứng dụng TextBox Control 262

6.4.4 Button Control và lớp cơ bản ButtonBase 265

6.4.4.1 Cấu hình vị trí nội dung 267

6.4.4.2 Một thí dụ sử dụng Button 267

6.4.5 CheckBox control 270

6.4.6 RadioButton & GroupBox control 271

6.4.6.1 Một thí dụ sử dụng RadioButton, CheckBox & GroupBox 272

6.4.7 List Controls 276

6.4.7.1 List control với các đối tượng 278

6.4.8 CheckedListBox Control 279

6.4.9 ListBox & ComboBox 282

6.4.9.1 Thí dụ CarConfg nới rộng với ComboBox 284

6.4.10 Cấu hình Tab Order 286

6.4.10.1 Tab Order Wizard 287

6.4.11 PictureBox Control 288

6.4.12 Domain Controls 289

6.4.12.1 TrackBar Control 289

6.4.12.2 ProgressBar Control 294

6.4.12.3 Spin Control: DomainUpDown và NumericUpDown 296

6.4.13 Các ô control container 299

6.4.13.1 Panel Control 299

6.4.14 Các ô control hiển thị dữ liệu ngày tháng năm 300

6.4.14.1 DateTimePicker Control 301

6.4.14.2 MonthCalendar Control 304

6.5 Lớp DateTime 308

6.6 Gán ToolTip lên ô Control 309

6.6.1 Thêm ToolTip vào lúc thiết kế 310

6.7 Kiểm tra hợp lệ đối với dữ liệu nhập vào 310

Trang 11

6.7.1 Một thí dụ kiểm tra hợp lệ 312

6.7.2 Kiểm tra hợp lệ sử dụng ErrorProvider 313

6.7.2 Kiểm tra hợp lệ sử dụng Regular Expressions 315

6.8 Cấu hình một hành xử neo đậu của một ô control 317

6.9 Cấu hình hành xử cập bến của một ô control 318

6.10 Tạo một Custom Dialog Box 319

6.10.1 Một thí dụ ứng dụng khung đối thoại 320

6.10.2 Trích dẫn dữ liệu từ một khung đối thoại 324

6.11 Form Inheritance 326

Chương 7 Các ô control tiên tiến 7.1 ImageList Control 330

7.1.1 Làm việc với ImageList thông qua chương trình 332

7.1.2 Một thí dụ về ImageList 335

7.2 ListView Control 337

7.2.1 Hiển thị icon trên ô control ListView 338

7.2.2 Thêm item lên ô control ListView 339

7.2.3 Thêm tiêu đề cột vào ListView 342

7.2.4 Thêm các subitem vào ListView 343

7.2.5 Các thủ thuật cao cấp dùng trên ListView 344

7.2.6 Hiệu đính Label 349

7.3 TreeView Control 351

7.3.1 Thêm và gỡ bỏ node trên TreeView Control 351

7.3.2 Cấu trúc TreeView 353

7.3.3 Lèo lái trên TreeView 354

7.3.4 Thao tác trên các node 359

7.3.5 Chọn ra các nodes 361

7.3.6 Các thủ thuật cao cấp của TreeView 363

7.3.7 Thêm icon vào TreeView control 364

7.3.8 Bung ra hoặc teo lại các cấp bậc 365

7.3.9 Lôi thả trên ô control TreeView 366

7.3.10 Chế ngự TreeView Control 371

7.3.10.1 Một dự án Tree Control 371

7.3.10.2 Một TreeView “ăn ý” với dữ liệu 373

7.3.10.3 Những TreeView bất thường 374

Trang 12

7.3.10.4 Hỗ trợ Custom TreeView vào lúc thiết kế 375

7.4 TabControl 375

7.4.1 Thêm một ô control lên TabControl 378

7.4.2 Thêm và gỡ bỏ TabPage trên TabControl 379

7.4.3 Thay đổi dáng dấp xuất hiện của TabControl 379

7.5 NotifyIcon Control 381

Chương 8 Tìm hiểu về Custom Control 8.1 Các loại custom control 384

8.2 Các dự án tạo ô custom control 385

8.2.1 Class Library Project 385

8.2.2 Qui chiếu về một Custom Control 387

8.2.3 Global Assembly Cache (GAC) 389

8.2.3.1 Tạo một key cho custom control 390

8.2.3.2 Áp dụng một key cho một control 390

8.2.3.3 Cài đặt một control lên GAC 391

8.2.4 Tạo những User Control 392

8.2.5 Thí dụ 1: Progress User Control 393

8.2.6 Thí dụ 2: Bitmap Thumbnail Viewer 398

8.2.6.1 Trắc nghiệm BitmapViewer user control 402

8.2.6.2 Các tình huống trên BitmapViewer user control 404

8.2.6.3 Tăng cường BitmapViewer và thêm mạch trình 406

8.3 Các ô control kế thừa 408

8.3.1 Inherited control và User control, nên chọn loại nào? 409

8.3.2 Một thí dụ: DirectoryTree Control 410

8.3.2.1 Trắc nghiệm DirectoryTree control 412

8.3.3 Một thí dụ khác: Masked TextBox 413

8.3.4 Một Custom Extender Provider 415

8.3.4.1 Một Menu Text Provider 415

8.3.4.2 Một Help Icon Provider 419

Chương 9 Hỗ trợ Custom Control vào lúc thiết kế

9.1 Cơ bản về Control Designer 424

Trang 13

9.1.1 Design-time Attributes 424

9.1.2 Căn bản về Serialization 427

9.1.3 Toolbox Bitmap 428

9.1.4 Các tập tin nguồn lực 429

9.2 Trắc nghiệm các ô control custom 432

9.2.1 Hỗ trợ gỡ rối vào lúc thiết kế 432

9.2.2 Trắc nghiệm đối với chế độ thiết kế 433

9.2.3 Ô control PropertyGrid 435

9.3 Custom Designers 439

9.3.1 Sàng lọc các thuộc tính và tình huống 440

9.3.2 Designer Verbs 442

9.3.3 Control Designer Notifications 446

9.4 Data Types và UITypeEditors 447

9.4.1 Sử dụng UITypeEditors bẩm sinh 448

9.4.2 Custom UITypeEditors 450

9.5 Cấp bản quyền cho custom control 452

9.5.1 Tập tin bản quyền LIC đơn giản 452

9.5.2 Custom LIC File Licensing 453

9.5.3 Advanced License Providers 454

Chương 10 MDI Interfaces và Workspace

10.1 Câu chuyện MDI 457

10.1.1 Các loại ứng dụng MDI 458

10.2 Các điều cần biết về MDI 458

10.2.1 Tìm ra “bà con thân thích” 460

10.2.2 Đồng bộ hóa các biểu mẫu MDI con-cái 461

10.2.3 Cách bố trí các cửa sổ MDI 462

10.2.4 Trộn lại các trình đơn 468

10.2.5 Quản lý trạng thái giao diện 469

10.2.6 Kiến trúc Document-View 471

10.2.6.1 Một chương trình hóa đơn được thiết kế theo document-view 472 10.3 Các cửa sổ trôi nổi và cập bến 486

10.3.1 Các thanh công cụ trôi nổi 487

10.3.1.1 Các ô control bất thường 490

10.3.2 Các cửa sổ cập bến được 490

Trang 14

10.3.2.1 Các cửa sổ dockable với các ô control owner-drawn 491

10.3.2.2 Các cửa sổ dockable với timers 491

Chương 11 Dynamic User Interface

11.1 Trường hợp đối với Dynamic User Interface 499

11.2 Tạo những ô control vào lúc chạy 501

11.2.1 Chương trình ButtonMaker 501

11.2.2 Một ứng dụng System Tray 504

11.2.3 Sử dụng các ô control trong một chương trình vẽ 510

11.3 Nội dung động 518

11.3.1 Bản địa hóa (localization) 518

11.3.2 Một thí dụ Dynamic Menu 521

11.4 Lập trình vận hành theo dữ liệu 524

11.4.1 Một ứng dụng tính giá data-driven 525

11.5 “Cỗ máy” bố trí các ô control 526

11.5.1 SingleLineFlow Layout Manager 527

11.5.2 “Cỗ máy” bố trí ô control hoạt động như là Extender Providers 530

Chương 12 Tìm hiểu về Data Controls 12.1 Nhập môn về gắn kết với dữ liệu 532

12.2 Cơ bản về Data Binding 533

12.2.1 Gắn kết một bảng liệt kê đơn giản 534

12.2.2 Gắn kết ô list control vớinhững đối tượng phức tạp 536

12.2.3 Gắn kết với trị đơn độc 539

12.3 ADO NET Data Binding 541

12.3.1 Multiple Control Binding 544

12.3.2 Nhật tu với Data Binding 546

12.3.3 Định dạng dữ liệu trước khi gắn kết 547

12.3.4 Chuyển đổi cao cấp 550

12.3.5 Kiểm tra hợp lệ và Thay đổi thô 552

12.4 Thử trình bày Data Binding 554

12.4.1 Lèo lái với Data Binding 555

12.4.2 Phản ứng trước Record Navigation 556

12.4.3 Tạo các biểu mẫu kiểu Master-Detail 557

Trang 15

12.4.4 Tạo một Binding Context mới 559

12.5 DataGrid Control 560

12.5.1 Các mối liên hệ trên DataGrid 560

12.5.2 Ánh xạ cột dữ liệu trên DataGrid 561

12.5.3 Tạo Custom DataGrid Column Styles 562

12.6 Thực hiện sự gói ghém đối với Data Controls 566

12.6.1 Kiểm tra hợp lệ đối với dữ liệu bị gắn kết 567

12.7 Các ô control “ăn ý” với data 572

12.7.1 Một TreeView “ly thân” với các mắt gút đúng lúc 576

12.7.2 Có thể nào là một DataBound ListView Control? 578

Chương 13 Các ô GDI+ Controls 13.1 Các ô control GDI+ đơn giản 580

13.1.1 Một GradientLabel Control 581

13.1.2 Cải tiến hỗ trợ GradientLabel Control vào lúc thiết kế 583

13.1.3 Một Marquee Label Control 590

13.2 Tạo những Button Control 598

13.2.1 Một Hot Tracking Button 598

13.3 Thử xét lại chương trình vẽ vec tơ 602

13.3.1 Giải quyết vấn đề ranh giới 603

13.4 Một ô control vẽ biểu đồ đơn giản 611

Chương 14 Help và Hỗ trợ được đặt lọt thỏm trên các ứng dụng 14.1 Trường hợp yêu cầu Help 619

14.2 Các loại Help 620

14.2.1 WinHelp 620

14.2.2 WinHelp 95 620

14.2.3 HTML Help 621

14.2.4 MS Help 2 623

14.2.4.1 Một vài công cụ viết ra Help 624

Trang 16

14.3 Help cổ điển tồi tệ 624

14.4 Help cơ bản dùng đến HelpProvider 625

14.4.1 Hiển thị một popup Help 628

14.4.2 Control-Based và Form-Based Help 629

14.4.2.1 Thí dụ HelpTest 630

14.5 Triệu gọi Help theo lập trình 634

14.5.1 Help không có HelpProvider 635

14.5.2 Dùng đến Help dựa vào căn cứ dữ liệu 635

14.5.3 Dùng đến Help dựa vào công tác 636

14.5.4 Tạo riêng Help cho bạn 638

14.6 Hỗ trợ ứng dụng được đặt lọt thỏm 639

14.6.1 Affordances 640

14.6.1.1 Hội nhập Help và GUI 640

14.6.2 Agents 641

Chỉ Mục 653

Trang 17

Lời mở đầu

Vào tháng 7/1998 người viết cho phát hành tập I bộ sách “Lập trình Windows sử dụng Visual C++ 6.0 và MFC” Toàn bộ gồm 8 tập, 6 nói về lý thuyết và 2 về thực hành Các tập đi sau được phát hành lai rai mãi đến 10/2000 mới xong Bộ sách được bạn đọc đón chào nồng nhiệt (mặc dầu chất lượng giấy và kiểu quay ronéo không được mỹ thuật cho lắm, nhưng giá rẻ vừa túi tiền bạn đọc) và được phát hành đi phát hành lại trên 10 ngàn bộ và không biết bao nhiêu đã bị photocopy và “bị luộc” Và vào thời điểm hoàn thành bộ sách lập trình Windows kể trên (tháng 10/2000) người viết cũng đã qua 67 tuổi, quá mệt mỏi, và cũng vào lúc vừa giải thể văn phòng SAMIS không kèn không trống, thế

là người viết quyết định “rửa tay gác kiếm” luôn, mặc dầu trước đó vài ba tháng đã biết Microsoft manh nha cho ra đời một ngôn ngữ lập trình mới là C# trên một sàn diễn mang tên NET ám chỉ ngôn ngữ thời đại mạng Internet Tuy nhiên, như đã định soạn giả vẫn ngưng viết, xem như nghỉ hưu luôn, quay về chăm sóc vườn phong lan bị bỏ bê từ lúc bắt đầu viết bộ sách lập trình Windows kể trên

Nghỉ hưu thiếu vài tháng thì đúng 3 năm, vào tháng 5/2003, anh Nguyễn Hữu Thiện, người sáng lập ra tờ báo eChip, mời tham gia viết sách thành lập tủ sách tin học cho tờ báo Thế là “a lê hấp” người viết đồng ý ngay, cho đặt mua một lô sách về C#, VB.NET

và NET Framework để nghiên cứu Càng đọc tài liệu càng thấy cái ngôn ngữ mới này nó khác với C++ đi trước khá nhiều, rõ ràng mạch lạc không rối rắm như trước và rất dễ học một cách rất ư tự nhiên Thế là một mạch từ tháng 5/2003 đến nay, người viết đã hoàn chỉnh xong 5 trên tổng số 8 tập Mỗi tập dài vào khoảng từ 600 đến 750 trang

Bạn cứ thử hình dung là trong ngành điện toán, cứ vào khoảng một thập niên thì có một cuộc cách mạng nho nhỏ trong cách tiếp cận về lập trình Vào thập niên 1960 là sự xuất hiện ngôn ngữ Cobol và Fortran (cũng như ngôn ngữ RPG của IBM) thay thế cho hợp ngữ, giữa thập niên 70 là sự xuất hiện máy vi tính với ngôn ngữ Basic, vào đầu thập niên 80 những công nghệ mới là Unix có thể chạy trên máy để bàn với ngôn ngữ cực mạnh mới là C, phát triển bởi ATT Qua đầu thập niên 90 là sự xuất hiện của Windows và C++ (được gọi là C với lớp), đi theo sau là khái niệm về lập trình thiên đối tượng trong bước khai mào Mỗi bước tiến triển như thế tượng trưng cho một đợt sóng thay đổi cách lập trình của bạn: từ lập trình vô tổ chức qua lập trình theo cấu trúc (structure programming hoặc procedure programming), bây giờ qua lập trình thiên đối tượng Lập trình thiên đối tượng trên C++ vẫn còn “khó nuốt” đối với những ai đã quen cái nếp nghĩ theo kiểu lập trình thiên cấu trúc Vả lại, lập trình thiên đối tượng vào cuối thập niên qua vẫn còn nhiều bất cập, không tự nhiên nên viết không thoải mái

Bây giờ, với sự xuất hiện của NET với các ngôn ngữ C#, VB.NET, J# xem ra cách suy nghĩ về việc viết chương trình của bạn sẽ thay đổi, theo chiều hướng tích cực Nói

Trang 18

một cách ngắn gọn, sàn diễn NET sẽ làm cho bạn triển khai phần mềm dễ dàng hơn trên

Internet cũng như trên Windows mang tính chuyên nghiệp và thật sự thiên đối tượng Nói

một cách ngắn gọn, sàn diễn NET được thiết kế giúp bạn triển khai dễ dàng những ứng

dụng thiên đối tượng chạy trên Internet trong một môi trường phát tán (distributed) Ngôn

ngữ lập trình thiên Internet được ưa thích nhất sẽ là C#, được xây dựng từ những bài học

kinh nghiệm rút ra từ C (năng xuất cao), C++ (cấu trúc thiên đối tượng), Java (an toàn) và

Visual Basic (triển khai nhanh, gọi là RAD - Rapid Application Development) Đây là

một ngôn ngữ lý tưởng cho phép bạn triển khai những ứng dụng web phát tán được kết

cấu theo kiểu ráp nối các cấu kiện (component) theo nhiều tầng nấc (n-tier)

Tập III được tổ chức thế nào?

Tập III này có tham vọng là một tập hướng dẫn thiết kế giao diện người sử dụng dùng

.NET và Visual C# Mục tiêu của tập sách này là dành cho những ai đã kinh qua hai tập

đầu của bộ sách này Vì trong tập III này chúng tôi sẽ không mô tả những khái niệm cốt

lõi của NET như namespace, assembly, thụ lý biệt lệ và kiểu dữ liệu, là những điều cơ

bản đối với thiết kế NET Ngoài ra, tập này cũng không đá động gì đến lập trình thiên đối

tượng Bạn không thể đi xa nếu bạn không biết chi về lớp, interface và các kiểu dữ liệu

.NET, mà trong tập này thì các thí dụ lại dựa trên những cơ bản này sử dụng các đối

tượng để gói ghém, tổ chức và chuyển giao thông tin Cuối cùng, tập III này cũng không

trình bày môi trường triển khai Visual Studio NET IDE mà bạn sẽ làm việc trong việc

thiết kế giao diện người sử dụng Tất cả các điều này đã chứa trong hai tập I và II của bộ

sách này Do đó, nếu bạn chưa biết chi về Visual C# cũng như NET Framework thông

qua hai tập I và II thì bạn chớ bắt đầu đọc tập III này

Chương 1 Tạo giao diện người sử dụng có thể dùng lại được

Thiết kế giao diện người sử dụng không chỉ thuần túy là làm thế nào lập trình phần tử

giao diện tối tân nhất, mà là những gì liên quan đến các qui ước, tính nhất quán và những

thể thức tốt nhất hướng dẫn người sử dụng trên một “trận địa” chưa hề quen biết Trong

chương này bạn sẽ học những cơ bản về lý thuyết thiết kế giao diện và những nguyên tắc

hỗ trợ mọi thiết kế tốt

Chương 2 Thiết kế giao diện theo lớp và theo tầng nấc

Trong nhiều năm qua, các sách lập trình cũng như các bài báo tin học đều cổ vũ việc

thiết kế ứng dụng theo kiểu tam tầng (three tier) Cách tiếp cận này phân cách rõ ràng

giao diện người sử dụng khỏi đoạn mã ứng dụng Mặc dù sự nhấn mạnh này, các ứng

Trang 19

dụng trong thế giới thực ít khi theo đuổi các hướng dẫn tốt lành này Trong chương này bạn sẽ tìm thấy là với NET các thiết kế theo tầng nấc sau này được dễ dàng thực hiện hơn

Chương 3 Tìm hiểu đồ hoạ và GDI+

GDI+ là framework đồ họa thế hệ kế tiếp Trong chương này bạn sẽ khảo sát GDI+ từ dưới lên bạn sẽ học cách làm thế nào có thể vẽ ngoài và trong hàm thụ lý tình huống vẽ, làm thế nào thụ lý việc thay đổi kích thước biểu mẫu, cũng như làm thế nào sử dụng các công cụ cơ bản như pen và brush chẳng hạn Ngoài ra, bạn sẽ làm quen với những đề mục cao cấp chẳng hạn double buffering để loại bỏ hiện tượng nhấp nháy, hoặc hit testing khi

sử dụng các hình chữ nhật hoặc path, và tập vẽ những phần tử GUI chuẩn chẳng hạn focus clues và disabled images

Chương 4 Tìm hiểu về biểu mẫu và lớp Form

Lớp Form là cơ bản đối với mọi cửa sổ ứng dụng trong một chương trình NET Muốn sử dụng hữu hiệu các biểu mẫu, bạn cần am hiểu làm thế nào các biểu mẫu tương tác, diễu hành, và làm chủ lẫn nhay Chương này cố gắng giải thích những điều cơ bản, và

đi sâu vào những kỹ thuật hấp dẫn mới chẳng hạn visual inheritance, Windows XP style

và các biểu mẫu hình dáng ký quái Ngoài ra, bạn sẽ biết cách tạo những cửa sổ nhiều khung chạy được

Chương 5 Cơ bản về lớp Control

Chương này sẽ đào sâu vào chi tiết của một trong những lớp phong phú nhất của NET, đó là lớp Control Trong chương này, bạn sẽ học cách lớp Control định nghĩa những tính năng cơ bản đáp ứng những tình huống như phím bị ấn xuống, hoặc những chuyển động của con chuột, cũng như việc định nghĩa những mối liên hệ giữa các ô control cũng như việc thụ lý các thông điệp Windows Ngoài ra, bạn sẽ học qua những điều cơ bản của namespace System.Drawing liên quan đến các point, rectangle, color, và font

Chương 6 Tìm hiểu về Windows Forms Controls

Chương này sẽ đi sâu vào những ô control cổ điển (có từ thời lập trình Windows bit) mà NET Framework cung cấp trong việc nhập liệu, chọn lựa và hiển thị dữ liệu Trong chương này, bạn sẽ khám phá những chi tiết nằm đằng sau các ô control kiểm tra hợp lệ ngoài những kiểu dữ liệu TextBox, Button, và ListBox Bạn sẽ kết thúc chương này bằng cách làm thế nào xây dựng những khung đối thoại custom và hiểu thế nào là

16-“form inheritance” một kỹ thuật mới

Trang 20

Chương 7 Các ô control tiên tiến

Chương này sẽ mổ xẻ những ô control Windows rất được ưa thích, bao gồm

TreeView, ListView, TabControl và NotifyIcon Khi làm quen với những ô control này,

bạn sẽ thấy một vài sáng tạo trong việc nới rộng các ô control này vào những lớp custom

cho phép tạo ra những tính năng cao cấp hoặc đáp ứng với những loại dữ liệu đặc trưng

Chương 8 Các ô custom control

Việc triển khai những ô custom control là một trong những đề mục chủ yếu của tập

sách này, và là một tính năng khá lý thú của sàn diễn NET Chương này sẽ xét đến những

loại ô control cơ bản mà bạn có thể tạo ra, và dẫn nhập vào những thí dụ như bitmap

thumbnail viewer, progress user control, và directory tree Ngoài ra, bạn sẽ làm quen với

những đề mục cao cấp như lập trình asynchronous control, custom exyender provider,

v.v mà bạn có thể triển khai lên bất cứ ô NET control nào

Chương 9 Hỗ trợ Custom Control vào lúc thiết kế

Tạo một custom control xem ra dễ dàng, nhưng làm cho nó hành xử tốt vào lúc thiết

kế thường phải mất công sức Trong chương này, bạn sẽ thấy các custom control

designer, UITypeEditors, và context-menu verbs có thể trang bị thế nào các ô custom

control của bạn đối với Visual Studio NET Ngoài ra, bạn sẽ làm quen với những mô

hình khác nhau về custom control dùng trong việc xử lý các bản quyền

Chương 10 MDI Interfaces và Workspace

MDI Interface được xem như là tiêu chuẩn thiết kế trong các ứng dụng tiên tiến,

.NET làm cho MDI dễ dàng như chỉ là một vài đặt để các thuộc tính đơn giản của Form

Chương này sẽ khảo sát một vài kỹ thuật thiết kế tốt nhất trong việc triển khai MDI, bao

gồm đồng bộ hoá và kiến trúc Document-View Ngoài ra, bạn sẽ làm quen với việc tạo

những thanh công cụ trôi nổi và thiết kế những cửa sổ có thể cập bến được

Chương 11 Dynamic User Interfaces

Dynamic User Interface – tạo những ô control vào lúc chạy thay vì vào lúc thiết kế -

không phải là một triết lý giúp bạn phá vỡ một vài hạn chế quan trọng nhất của Visual

Studio NET Trong chương này, bạn sẽ học qua cách thi công nội dung sống động, làm

quen với một thí dụ tạo một dynamic control thông qua một framework vẽ dựa trên

vector, và xét đến việc tạo một custom layout engine

Chương 12 Tìm hiểu về Data Controls

Trang 21

Trong một lúc nào đó, phần lớn các ứng dụng đều cần đến dữ liệu lấy từ các căn cứ

dữ liệu Chương này sẽ xét đến việc làm thế nào bạn có thể hội nhập dữ liệu vào giao diện người sử dụng mà không phải tạo một giao diện quá gắn bó chặt chẽ với một chiến lược truy cập dữ liệu hoặc vào một dữ liệu nguồn Nói cách khác, bạn sẽ học cách làm thế nào

có thể tạo một giao diện không qui chiếu trực tiếp tên các vùng mục tin hoặc giả định là

dữ liệu sẽ được tìm đọc thấy tất cả trong một lúc Các giải pháp sẽ dẫn dắt bạn đến việc khảo sát việc gắn kết dữ liệu NET, cũng như cách nới rộng gắn kết dữ liệu này và làm thế nào có thể tạo những custom control “ăn ý” với dữ liệu

Chương 13 GDI+ Controls

Chương này sẽ đưa GDI+ platform làm việc với những thí dụ cho thấy một gradient label, marquee text và button control được hình thành từ số không Bạn sẽ triển khai một bar-graphing control và có những cái nhìn khác đi đối với thí dụ vẽ dựa trên vec tơ từ chương 11 với những ô control owner-drawn

Chương 14 Help và Hỗ trợ được đặt lọt thỏm trên ứng dụng

Chương cuối cùng này chỉ cho bạn cách đưa phần Help vào giao diện người sử dụng bạn sẽ làm quen với những kỹ thuật cơ bản đối với Help cảnh ứng, các kỹ thuật cung cấp Help dựa trên công tác, cũng như những mẹo vặt cho phép bạn hội nhập những cửa sổ help vào ứng dụng của bạn Ngoài ra, bạn cũng sẽ làm quen với Microsoft Agent Control chuyên cung cấp một nhân vật sống động có thể hướng dẫn người sử dụng

Bộ sách NET Toàn tập gồm những tập nào?

Như đã nói, bộ sách NET toàn tập này gồm 8 tập, 6 nói về lý thuyết và 2 về thí dụ thực hành

Tập I: Lập trình Visual C# thế nào?

Chương 1 Visual C# và NET Framework

Chương 2 Bắt đầu từ đây ta tiến lên!

Chương 3 Sử dụng Debugger thế nào?

Chương 4 Căn bản Ngôn ngữ C#

Chương 5 Lớp và Đối tượng

Chương 6 Kế thừa và Đa hình

Chương 7 Nạp chồng tác tử

Chương 8 Cấu trúc Struct

Chương 9 Giao diện

Trang 22

Chương 10 Bản dãy, Indexers và Collections

Chương 11 Chuỗi chữ và biểu thức regular

Chương 12 Thụ lý các biệt lệ

Chương 13 Ủy thác và tình huống

Chương 14 Lập trình trên môi trường NET

Tập II: Visual C# và Sàn diễn NET

Chương 1 Input/Output và Object serialization

Chương 2 Xây dựng một ứng dụng Windows

Chương 3 Tìm hiểu về Assembly và cơ chế Version

Chương 4 Tìm hiểu về Attribute và Reflection

Chương 5 Marshalling và Remoting

Chương 6 Mạch trình và Đồng bộ hoá

Chương 7 Tương tác với unmanaged code

Chương 8 Lập trình ứng dụng Web

Chương 9 Lập trình Web Service

Tập III: Giao diện người sử dụng viết theo Visual C#

Chương 1 Tạo giao diện người sử dụng dùng lại được

Chương 2 Thiết kế giao diện theo lớp và theo tầng nấc

Chương 3 Tìm hiểu đồ hoạ và GDI+

Chương 4 Tìm hiểu về biểu mẫu và lớp Form

Chương 5 Cơ bản về lớp Control

Chương 6 Tìm hiểu về Windows Forms Controls

Chương 7 Các ô control tiên tiến

Chương 8 Các ô custom control

Chương 9 Hỗ trợ Custom Control vào lúc thiết kế

Chương 10 MDI Interfaces và Workspace

Chương 11 Dynamic User Interfaces

Chương 12 Tìm hiểu về Data Controls

Chương 13 GDI+ Controls

Chương 14 Help và Hỗ trợ được đặt lọt thỏm trên ứng dụng

Tập IV: Lập trình Căn Cứ Dữ Liệu

với Visual C# & ADO.NET

Chương 1 Sử dụng Căn cứ dữ liệu

Trang 23

Chương 2 Tổng quan về ADO NET

Chương 3 Data Component trong Visual Studio NET

Chương 4 Các lớp ADO.NET tách rời

Chương 5 ADO.NET Data Providers

Chương 6 Trình bày IDE theo quan điểm Database

Chương 7 Làm việc với XML

Chương 8 Triển khai ứng dụng Web sử dụng ADO.NET

Chương 9 Sử dụng các dịch vụ Web với ADO.NET

Chương 10 Thụ lý các tình huống trên ADO.NET

Chương 11 Stored procedure và View

Chương 12 Làm việc với Active Directory

Chương 13 Làm việc với ODBC.NET data provider

Tập V: Lập trình ASP.NET & Web

Chương 1 ASP.NET và NET Framework

Chương 2 Tìm hiểu các tình huống

Chương 3 Tìm hiểu các ô Web Control

Chương 4 Chi tiết về các ASP Control

Chương 5 Lập trình Web Form

Chương 6 Kiểm tra hợp lệ

Chương 7 Gắn kết dữ liệu

Chương 8 List-Bound Control - Phần 1

Chương 9 Truy cập căn cứ dữ liệu với ADO.NET

Chương 10 ADO.NET Data Update

Chương 11 List-Bound Control - Phần II

Chương 12 User Control và Custom Control

Chương 13 Web Services

Chương 14 Caching và Năng suất

Chương 15 An toàn

Chương 16 Triển khai ứng dụng

Tập VI: Lập trình các báo cáo dùng

Crystal Reports NET

Chương 01 Tổng quan về Crystal Reports Net

Chương 02 Hãy thử bắt đầu với Crystal Reports NET

Chương 03 Tìm hiểu Crystal Reports Object Model

Chương 04 Sắp xếp & Gộp nhóm

Chương 05 Sử dụng các thông số

Chương 06 Uốn nắn các báo cáo

Chương 07 Tìm hiểu về Công thức & Lô gic chương trình

Trang 24

Chương 08 Vẽ biểu đồ thế nào?

Chương 09 Tạo báo cáo Cross-Tab

Chương 10 Thêm Subreports vào báo cáo chính

Chương 11 Hội nhập báo cáo vào ứng dụng Windows

Chương 12 Hội nhập báo cáo vào ứng dụng Web

Chương 13 Tạo XML Report Web Services

Chương 14 Làm việc với các dữ liệu nguồn

Chương 15 Xuất khẩu và triển khai hoạt động các báo cáo

Tập VII: Sổ tay kỹ thuật C# - phần A

Chưa định hình các chương

Tập VIII: Sổ tay kỹ thuật C# - phần B

Chưa định hình các chương

Bộ sách này dành cho ai?

Bộ sách này được viết dành cho những ai muốn triển khai những ứng dụng chạy trên

Windows hoặc trên Web dựa trên nền NET Chắc chắn là có nhiều bạn đã quen viết C++,

Java hoặc Visual Basic, hoặc Pascal Cũng có thể bạn đọc khác lại quen với một ngôn

ngữ khác hoặc chưa có kinh nghiệm gì về lập trình ngoài lập trình cơ bản Bộ sách này

dành cho tất cả mọi người Vì đây là một bộ sách tự học không cần thầy, chỉ cần có một

máy tính được cài đặt NET Đối với ai chưa hề có kinh nghiệm lập trình thì hơi khó một

chút nhưng “cày đi cày lại” thì cũng vượt qua nhanh những khó khăn này Còn đối với

những ai đã có kinh nghiệm lập trình thì sẽ mê ngay ngôn ngữ này và chỉ trong một thời

gian rất ngắn, 6 tháng là tối đa là có thể nắm vững những ngóc ngách của ngôn ngữ mới

này, và có thể biết đâu chừng trong một thời gian rất ngắn bạn sẽ trở thành một “guru”

ngôn ngữ C# Người viết cũng xin lưu ý bạn đọc là bộ sách này là sách tự học (tutorial)

chứ không phải một bộ sách tham chiếu (reference) về ngôn ngữ, nên chỉ mở đường phát

quang hướng dẫn bạn đi khỏi bị lạc, và đem lại 60% kiến thức về ngôn ngữ Và khi học

tới đâu, tới một chặng đường nào đó bạn có thể lên MSDN phăng lần đào sâu từng đề

mục con mà bạn đang còn mơ hồ để có thể phăng lần 40% còn lại kiến thức để nắm vững

vấn đề Lấy một thí dụ Trong bộ sách này, chúng tôi thường đề cập đến các lớp Chúng

tôi giải thích tổng quát cho biết lớp sẽ được dùng vào việc gì và sử dụng một số hàm hành

sự (method) hoặc thuộc tính (property) tiêu biểu của lớp này trong những thí dụ cụ thể

Thế nhưng mỗi lớp có vô số hàm hành sự và thuộc tính cũng như tình huống Thì lúc này

bạn nên vào MSDN tham khảo từng hàm hành sự hoặc thuộc tính một của lớp này để bạn

Trang 25

có một ý niệm sơ sơ về những công năng và đặc tính của lớp Có một số chức năng/đặc tính bạn sẽ chả bao giờ sử dụng đến, còn một số thi thoảng bạn mới cần đến Cho nên về sau, khi bạn muốn thực hiện một chức năng gì đó, thì bạn có thể vào lại MSDN xem lớp

có một hàm hoặc thuộc tính đáp ứng đúng (hoặc gần đúng) nhu cầu của bạn hay không và nếu có thì lúc này bạn mới xem kỹ cách sử dụng Kinh nghiệm cho thấy, là trong suốt cuộc đời hành nghề lập trình viên, bạn sẽ “xào đi xào lại” cũng chừng nấy lệnh, hoặc một

số hàm nào đó theo một mẫu dáng (pattern) nào đó, nên một khi bạn đã khám phá ra những lệnh hoặc hàm này, và áp dụng thành công thì bạn sẽ thường xuyên dùng đến một cách máy móc không cần suy nghĩ gì thêm

Theo tập quán phát hành sách hiện thời trên thế giới, thì sách sẽ kèm theo một đĩa mềm hoặc đĩa CD chứa các bài tập thí dụ Ở đây rất tiếc, chúng tôi không làm thế vì nhiều lý do Thứ nhất giá thành sẽ đội lên, mà chúng tôi thì lại muốn có những tập sách giá bán đến tay bạn đọc rẻ bằng 50% giá hiện hành của các sách khác cùng dung lượng (nhưng khác chất lượng nội dung) Thứ hai, các bạn chịu khó khỏ lệnh vào máy, khỏ tới đâu bạn đọc hiểu tới đấy Đôi khi khỏ lệnh sai, máy bắt lỗi bạn sẽ biết những thông điệp cảnh báo lỗi nói gì để về sau mà cảnh giác Còn nếu tải chương trình xuống từ đĩa vào máy, cho thử chạy tốt rồi bạn bằng lòng rốt cuộc bạn chả hiểu và học gì thêm Khi khỏ một câu lệnh như thế bạn phải biết bạn đang làm gì, thực hiện một tác vụ gì, còn như nhắm mắt tải lệnh xuống thì cũng chẳng qua là học vẹt mà thôi không động não gì cả Chúng tôi hy vọng bộ sách sẽ giúp bạn có một nền tảng vững chắc trong việc lập trình trên NET

Ngoài ra, trong tương lai, nếu sức khoẻ cho phép (vì dù gì thì tuổi soạn giả cũng gần 72) chúng tôi dự kiến ra bộ sách về phân tích thiết kế các ứng dụng điện toán sử dụng UML và Pattern Trong những buổi gặp gỡ giữa bạn bè và một đôi lần trên báo chí khi họ than phiền là kỹ sư tin học bây giờ ra trường không sử dụng được, chúng tôi thường hay phát biểu là không ngạc nhiên cho lắm khi ta chỉ cho ra toàn là “thợ lập trình” giống như bên xây dựng là thợ hồ, thợ nề thợ điện thợ mộc v v chứ đâu có đào tạo những kiến trúc

sư (architect) biết thiết kế những bản vẽ hệ thống Do đó, chúng tôi dự kiến (hy vọng là như vậy) là sẽ hoàn thành một bộ sách đề cập đến vấn đề phân tích thiết kế những hệ thống sử dụng những thành tựu mới nhất trên thế giới là UML và Pattern với những phần mềm thích ứng là IBM Rational Rose XDE và Microsoft Visio for Enterprise Architect Ngoài ra, những gì học ở trường là thuần túy về kỹ thuật lập trình, về mô phỏng, trí tuệ nhân tạo, lý thuyết rời rạc v.v (mà những mớ lý thuyết này không có đất dụng võ) nhưng khi ra trường vào các xí nghiệp thì mù tịt về quản lý nhân sự, về kế toán về tồn kho vật

tư, về tiêu thụ v v mà 80% ứng dụng tin học lại là vào các lãnh vực này Do đó, trong

bộ sách mà chúng tôi dự kiến sẽ soạn những tập đi sâu vào xây dựng những hệ thống quản lý trong các cơ quan xí nghiệp hành chánh cũng như thương mại

Trang 26

Đôi lời cuối cùng

Kể từ năm 1989, năm thành lập văn phòng dịch vụ điện toán SAMIS, cho đền nay

gần trên 15 năm chúng tôi cùng anh chị em trong nhóm SAMIS đã biên soạn trên 55 đầu

sách, và cũng đã phát hành gần 400.000 bản, trong ấy 60% là phần của soạn giả Từ

những tiền lời kiếm được do tự phát hành lấy cộng thêm tiền hưu tiết kiệm của bà vợ

người Thụy sĩ, hằng năm chúng tôi đã dành toàn bộ số tiền này để xây các trường cho

những vùng sâu vùng xa trên 15 tỉnh thành đất nước (Sơn La, Nghệ An, Quảng Ngãi,

Quảng Nam, Quảng Trị, Bình Định, Ban Mê Thuột, Pleiku, Daklak, Bà Rịa Vũng Tàu,

Đồng Nai, Bình Dương, TP Hồ Chí Minh, Cần Thơ, và Cà Mau), cấp học bổng cho các

sinh viên nghèo tại các đại học Huế, Đà Nẵng, An Giang và TP Hồ Chí Minh, hỗ trợ vốn

cho giáo viên ở An Lão (Bình Định), xây nhà cho giáo viên ở vùng sâu vùng xa (Bình

Định, Quảng Trị), và tài trợ mổ mắt cho người nghèo ở An Giang (4 năm liền) Các hoạt

động xã hội này đều thông qua sự hỗ trợ của hai tờ báo Tuổi Trẻ và Sài Gòn Giải Phóng

Không ngờ những việc làm rất cá nhân này lại được Nhà Nước “theo dõi” đến nỗi không

biết vị nào đã “xúi” Chủ tịch nước Trần Đức Lương ký quyết định tặng người viết Huân

chương Lao động Hạng 3, ngày 29/8/2000 Nói ra điều này, chúng tôi muốn bạn đọc hiểu

cho là tự nội lực của ta, ta cũng có thể giúp đỡ giáo dục mà khỏi nhờ viện trợ của các

nước Nhật, Hàn Quốc Nếu các bạn ý thức rằng mỗi tập sách bạn mua của chúng tôi thay

vì mua sách “luộc” hoặc photocopy là bạn đã gián tiếp tham gia vào chương trình xây

trường lớp cho vùng sâu vùng xa cũng như hỗ trợ học bổng cho sinh viên nghèo của

chúng tôi

Cuối cùng, chúng tôi xin cảm ơn sự hỗ trợ của các anh chị Hoàng Ngọc Giao, Võ

Văn Thành và Trần Thị Thanh Loan trong việc hoàn thành bộ sách này

TP Hồ Chí Minh ngày 22/04/2005

Dương Quang Thiện

Trang 27

sử dụng các ô control thông dụng mang tính ẩn dụ?

Thật thế, việc thiết kế giao diện người sử dụng thật sự là một tập hợp nhiều công tác khác nhau:

User interface modeling: Mô hình hoá giao diện người sử dụng Đây là tiến trình

theo đấy bạn xem xét các công việc mà chương trình cần hoàn thành, và đi đến quyết định làm thế nào chặt nhỏ các công việc này thành những cửa sổ và các ô control

User interface architecture: Kiến trúc giao diện người sử dụng Đây là lô gic

thiết kế mà bạn dùng để chia nhỏ chức năng trong ứng dụng thành những đối tượng riêng rẽ Bằng cách tạo ra một thiết kế nhất quán, và đặt kế hoạch đàng hoàng sẽ làm cho dễ dàng trong việc nới rộng giao diện, thay đổi và tái sử dụng những phần nhỏ của khung làm việc (framework) GUI

User interface coding: Lập trình giao diện người sử dụng Đây là tiến trình theo

đấy bạn thảo ra các đoạn mã dùng quản lý GUI với những lớp và đối tượng thích ứng

Lý tưởng mà nói, bạn tuân theo hai bước đầu tiên để bố trí một mô hình GUI cụ thể nào đó cũng như kiến trúc của nó trước khi tiến hành giai đoạn thứ ba này

Tập sách này tập trung nói đến giai đoạn cuối, và đây là bước tốn hao khá nhiều thời giờ, theo đấy việc thiết kế GUI sẽ được chuyển dịch thành đoạn mã sử dụng các công cụ và

kỹ thuật NET Tuy nhiên, khó lòng phân định rạch ròi lập trình tốt khỏi thiết kế đoạn mã tốt, và việc bàn cãi liên quan đến kiến trúc của GUI sẽ trở đi trở lại xuyên suốt tập sách này (và trọng tâm là trong chương 2, “Thiết kế giao diện theo Lớp và Tam nguyên” kế tiếp)

Trang 28

Tuy nhiên, chương này tập trung xem xét công việc đầu tiên: thiết kế GUI Ở đây bạn

sẽ xem xét những hướng dẫn thiết yếu mà không lập trình viên nào có thể cho phép phớt

lờ Bạn sẽ học những mánh (tip) cơ bản giúp bạn tổ chức thông tin, thụ lý sự phức tạp và

thử đóng vai trò của “quan toà” cuối cùng mà ai cũng phải sợ: đó là người sử dụng cuối

cùng (end user)

Bạn cũng có thể bỏ qua chương này, nhảy thẳng vào việc lập trình NET Tuy nhiên,

khung làm việc lập trình lớn nhất cũng không giải quyết những sai lầm thông dụng gay

cấn về GUI Việc học làm thế nào thiết kế một GUI cũng không kém phần quan trọng

như học cách lập trình GUI

1.1 Tại sao phải bận tâm về giao diện?

Giao diện người sử dụng là lớp vỏ mỏng bao trọn phần lô gic của chương trình và

cung cấp cho người sử dụng bình thường một cách thức tương tác với chương trình

Thông thường, GUI có 3 trách nhiệm:

 Suy diễn xem người sử dụng muốn gì rồi dịch ý muốn này ra thành những tác vụ

(operation) tương ứng

 Đi tìm lại thông tin và cho hiển thị thông tin này theo nhiều cách khác nhau

 Dẫn dắt người sử dụng xuyên qua một công tác (và lôi người sử dụng ra khỏi

những sai lầm thông dụng)

GUI thường vác trên vai sức nặng của một chương trình, vì đây là nơi duy nhất mà

người sử dụng tương tác với chương trình Bất chấp chương trình có thể làm gì nếu nó

bị gài nằm sau một giao diện mang nhiều hạn chế và gây vỡ mộng Giống như mọi việc

trong đời thường, thiên hạ đánh giá và nhận diện một chương trình dựa trên việc họ

thấy gì ở vẻ bề ngoài của giao diện Một giao diện dáng vẻ thân thiện hấp dẫn thì có thể

gây ấn tượng đối với người sử dụng, còn ngược lại một giao diện xấu xí thô kệnh gây

lúng túng sẽ là một mối đau đầu đối với người sử dụng cũng như đối với lập trình viên

triển khai

Trong giới lập trình viên, giao diện người sử dụng thường là đề tài gây tranh cãi sôi

nổi Một số lập trình viên cho rằng quá là cường điệu khi đặt trọng tâm chú ý vào giao

diện người sử dụng và họ nghĩ rằng như thế đi quá xa khỏi lập trình “thực thụ” Họ khiếp

sợ trước những đòi hỏi được định nghĩa một cách mơ hồ, trước những người sử dụng khó

tính cũng như trước sự cảm nhận là phải đơn giản hoá sản phẩm Còn một loại người

khác gồm các lập trình viên say mê thử nghiệm giao diện GUI với những ô control tối tân

xuất hiện chót nhất, không cần biết là có chuẩn hay không

Trang 29

Nói cho cùng, cả hai cách tiếp cận kể trên đều không tốt đối với người sử dụng cuối cùng, khi người sử dụng chỉ đòi hỏi một giao diện đơn giản, không gây khó chịu gò bó hoạt động đúng như ý họ muốn Muốn tạo một giao diện GUI ngon lành, có khả năng làm vừa lòng người sử dụng trung bình, bạn cần hiểu thấu những qui tắc “bất thành văn” về thiết kế giao diện

1.2 Một chút ít lịch sử về giao diện?

Bạn có thể xem việc thiết kế giao diện GUI như là một lịch sử đổi mới liên tục Thật thế, thiết kế GUI hiện được đánh dấu bởi một loạt lĩnh vực riêng biệt Điển hình là trong mỗi lĩnh vực thì sẽ triển khai một cách tiếp cận vượt trội Rồi sau đó, vào một lúc bất kỳ, một lập trình viên cô độc hoặc một nhóm lập trình viên đầy sáng tạo cho ra một mô hình GUI thật sự mới làm thế giới ngạc nhiên Và những tháng sau đó, hằng trăm lập trình viên

đổ xô tạo ra những phiên bản tương tự nhưng lại không tương thích Tiến trình bắt chước

“trật chìa” tiếp diễn cho tới khi một cuộc cách mạng kế tiếp xảy ra

1.2.1 Lĩnh vực Command-Line

Với bất cứ ai đã có kinh nghiệm với máy tính đều biết qua command-line nổi tiếng là

gì Ngày này, những ai tập tễnh vào nghề tin học đều nghĩ rằng command-line chẳng qua

là một “cửa hậu” cho phép truy cập vào những chức năng cấm kỵ và bị cất giấu khỏi các

“phó thường dân”

Một giao diện command-line là giấc mơ của người sử dụng có năng lực Lẽ dĩ nhiên,

kể cả người sử dụng có năng lục cũng phải học hỏi đâu đó, và phần lớn quên rằng command-line không phải là một công cụ dễ nắm bắt chế ngự

Trong chừng mực nào đó, command-line là cách thức nguyên thủy thực hiện những điều cần làm, và được cho rằng đây không phải là một cách thiết kế giao diện vì nó không

có giao diện như theo cách nhìn của người ngày nay Command line bắt đầu như là cơ bản đối với những hệ điều hành chẳng hạn DOS và UNIX (hình 1-1) theo đấy là cơ bản đối với những ứng dụng thuở ban đầu chẳng hạn dBASE, và tiếp tục sinh sôi nảy nở ở những nơi bất thường

Thí dụ, giao diện Visual Studio NET cung cấp một Command Window cho phép bạn tương tác với IDE hoặc cho thi hành những dòng lệnh đơn giản cùng lúc ứng dụng hiện đang chạy Ngoài một vài cải tiến hơi thô sơ (chẳng hạn autocomplete) nhưng vẫn là một giao diện Command Line cơ bản (hình 1-2)

Trang 30

Giao diện Command-Line mang những đặc tính sau đây:

Ultimate control. Nắm quyền điều khiển cuối cùng Người sử dụng có thể làm

bất cứ điều gì theo bất cứ trật tự nào, miễn là nhớ thuộc lòng các “mã bí mật”

Ultimate lack of structure. Cuối cùng là thiếu sót một cấu trúc Các người sử

dụng không những phải nhớ là biết làm gì nhưng phải biết làm theo thứ tự nào

Trên DOS, việc chỉ di chuyển một tập tin lên một thư mục mới có thể là một

công tác gồm nhiều giai đoạn đau đầu Theo mặc nhiên, giao diện

Command-Line giả định mỗi tác vụ là atomic (nghĩa là bất khả phân), và không có việc gắn

liền một công tác này với một công tác khác

Trang 31

A “hand off” treatment of user. Một cách đối đãi không chỉ giáo đối với

người sử dụng Với một vài biệt lệ nho nhỏ, sẽ không có hỗ trợ người sử dụng

thông qua những nhắc nhở (prompt), mánh (tip) hoặc hướng dẫn

No metaphors Không có ẩn dụ Điều này làm cho người sử dụng nắm vững

tiến trình cơ bản (khỏ vào các từ, rồi ấn Enter) không bao giờ thay đổi Tuy nhiên, khó lòng đoán được làm thế nào thực hiện một công việc có liên hệ dựa trên một công việc đi trước Thí dụ, nếu bạn biết cách chép một tập tin trên UNIX, bạn vẫn không biết làm thế nào gỡ bỏ tập tin đi

Ngày nay, mô hình command-line vẫn có thể xuất hiện trong giao diện của bạn, nhưng không chắc chắn lắm

Bạn không nắm quyền điều khiển: Đây có thể là một điều phúc lành mà cũng có thể là một khổ ải Nếu chương trình có một ý niệm rõ ràng nhu cầu của bạn, bạn sẽ ở vào một kịch bản “một nhà độc tài tốt bụng”, làm cho cuộc đời của bạn ít phức tạp Nhưng nếu chương trình giả định sai, thì bạn không tài nào đấu lại nó

Bạn có hướng dẫn cuối cùng. Một loại chỉ thị sẽ được cung cấp tại mỗi bước

đi trong tiến trình

Bạn vẫn không có những ẩn dụ (metaphor): Thật ra không đúng như thế - thỉnh thoảng một ẩn dụ sơ sài được dùng theo đấy chương trình mời bạn tưởng tượng một hướng dẫn viên thân thiện hỏi bạn loạt câu hỏi và cố làm những gì bạn muốn

Mô hình lập trình hỏi-đáp có một chỗ đứng đáng giá trong thế giới ngày nay, và ta có

thể thấy phổ biến trên các chương trình Windows được mang tên là wizard Wizard dẫn

dắt bạn qua một lô câu hỏi, và sau đó thực hiện một công tác phức tạp giùm bạn

Trang 32

Như bạn có thể khám phá ra, có những wizard hữu ích (giống như wizard giúp bạn

setup phần cứng trên máy tính) Nhưng cũng có những wizard không hữu ích cho mấy,

phức tạp hơn, đòi hỏi và hạn chế hơn bản thân chương trình (giống như wizard tạo các tài

liệu giùm bạn trong vài chương trình đồ họa phổ biến) Hình 1-3 cho thấy wizard

Windows dùng bổ sung phần cứng

TIP: Một tập quán tốt là cho thi công một wizard trong ứng dụng của bạn chỉ sau khi bạn

đã tạo ra một giao diện Windows chuẩn Điều này bảo đảm là bạn không rơi vô ý thức

vào việc lập trình chức năng ứng dụng trong lòng bản thân wizard, và việc này sẽ đem lại

cho người sử dụng uyển chuyển tối đa Một vài lập trình viên khuyên nên bỏ ra ngoài

wizard khỏi phiên bản đầu tiên của ứng dụng

Các chương trình hỏi-đáp là con dao hai lưỡi có thể làm cho ngán ngẩm cũng như gây

ấn tượng Phần kế tiếp sẽ phác họa những nguyên tắc chủ chốt giúp bạn làm việc mô hình

này

1.2.2.1 Hỏi những gì mà người sử dụng có thể trả lời

Xem ra là có ý nghĩa khi hỏi người sử dụng cho bạn biết công ty nào sản xuất máy in

bạn đang dùng Tuy nhiên, không gì vô duyên bằng khi hỏi người sử dụng có chuyển đổi

tab thành khoảng trắng đối với những tác vụ in trên DOS hay không Thay vào đó, ta chỉ

Trang 33

cần chọn một trị mặc nhiên thích ứng Bạn nên nhớ là không ai muốn bị hỏi mà không thể trả lời được Đối với người sử dụng mới tập tễnh làm quen máy tính, họ có thể bỏ ngang hoặc ngưng không đọc những câu nhắc nhở

1.2.2.2 Giới hạn vào một công tác đơn độc

Một wizard sẽ hoạt động tốt đối với một công tác đơn độc, và công tác này chỉ có thể được thực hiện theo một thể thức nào đó (chẳng hạn việc thêm một driver máy in) Ngay khi bạn bắt đầu thêm một phần tử vào những công tác khác nhau hoặc sáng tạo thì wizard

sẽ không theo nổi Bạn không nên nghĩ rằng bạn sẽ hãnh diện về một wizard phức tạp đi

rẽ có điều kiện (conditional branch) để sử dụng những cửa sổ khác nhau tùy thuộc vào những lựa chọn trước đó của người sử dụng Công việc đơn thuần của bạn là tạo ra một chương trình DOS cổ điển chỉ gồm một màn hình duy nhất, theo đấy các công tác phải được hoàn thành trong những cửa sổ riêng rẽ và theo một loạt trật tự

1.2.2.3 Nên để ý đến việc gò theo những sở thích của bạn

Mỗi wizard sẽ có riêng cho mình những mẫu dáng viết đoạn mã gắn chặt (hard-coded pattern) Người sử dụng sẽ không có lựa chọn về thứ tự nào phải trả lời những câu hỏi hoặc cung cấp thông tin, và việc mất quyền điều khiển có thể làm thất vọng bất cứ ai muốn tiếp cận khác đi một công tác nào đó Báo trước cho bạn biết là đặc biệt khi bạn đang sử dụng một wizard đối với một công việc phức tạp: bạn đang gò theo một thể thức duy nhất làm việc dựa theo những giả định cũng như thành kiến của bạn Nếu nó không khớp với thể thức mà phần lớn người sử dụng muốn làm thì nó chỉ tổ làm cho họ khổ sở

mà thôi

1.2.3 Mô hình vận hành theo trình đơn

Mô hình được vận hành theo trình đơn (menu-driven) là mô hình GUI được nhận diện dễ dàng nhất Nó khá phổ biến trong các chương trình dựa theo tài liệu giống như các trình soạn thảo văn bản DOS, và sau đó chiếm lĩnh hầu hết mọi ứng dụng trên hệ điều hành Windows Lý do rất dễ hiểu: các trình đơn tượng trưng cho một thỏa hiệp hấp dẫn, cho phép bạn nhắc nhở người sử dụng mà vẫn không hạn chế cách thức người sử dụng làm việc

 Các lệnh có thể được thực hiện theo bất cứ trật tự nào: bạn có hoàn toàn

tự do như với giao diện command-line

1 Chúng tôi dịch “menu” là trình đơn Có người dịch là thực đơn Ở đây chả có ăn uống gì mà phải gọi thực đơn Đây chẳng qua là liệt kê những chương trình giống như trên hoá đơn người ta liệt kê các mặt hàng

Trang 34

 Thông tin nằm trên màn hình sẽ nhắc nhở bạn: không bao giờ bạn được để

yên xoay xở một mình, và việc gộp chung với nhau những phần tử có thể giúp

bạn nhớ lại những gì bạn phải làm Thí dụ, nếu bạn muốn thay đổi khoảng cách

hàng trong Microsoft Word, có thể bạn không biết nó liên hệ với paragraph,

nhưng bạn có khả năng quyết định là trình đơn Format có thể là nơi tốt nhất để

bắt đầu việc khảo sát của bạn

Các trình đơn là một trong những phần tử chủ yếu trong lập trình Windows, và chúng

tuyệt đối không chừa chỗ cho những thí nghiệm hoặc cải tiến bốc đồng Muốn tạo một

trình đơn, bạn cho sao chép y chang Microsoft Office kể cả việc thêm trình đơn File cho

dù bạn không làm gì cả với các tập tin hoặc tài liệu Cũng tương tự như thế, tốt nhất là

bạn mô phỏng các mục chọn cơ bản như Edit, View, Window, và kể cả Tools trước khi

bạn bắt đầu thêm những trình đơn được tổ chức xung quanh những khái niệm đặc thù của

chương trình Về sau trong chương này bạn sẽ học nhiều hơn về vai trò của Microsoft

trong việc thiết kế giao diện người sử dụng

1.2.4 Lĩnh vực GUI

Sau một thời gian ngắn, khi sự sôi nổi do trình đơn đem lại đã lắng dịu, thì mọi người

đâm ra khoái chí với các hình ảnh, nút (button) và thế giới Macintosh và Microsoft

Windows Lĩnh vực GUI cho nhập vào vô số khái niệm và các phần tử giao diện thường

được gọi dưới cái tên lóng WIMP (windows, icon, mouse, và pointer) Một cải tiến chủ

chốt trong lĩnh vực GUI là việc đưa con chuột vào hoạt động cho phép đem lại nhiều

điểm đột nhập (point of entry) để tương tác với một ứng dụng Một thay đổi khác xảy ra

là việc chuyển dịch về cách biểu diễn thực tế - thí dụ, các chương trình soạn thảo văn bản

cho thấy tài liệu sẽ được in ra giống như thế nào Ý niệm chính trong lĩnh vực GUI là cho

giao diện người sử dụng dựa trên các ẩn dụ (metaphor) thuộc thế giới thực Thí dụ, nếu

bạn muốn gỡ bỏ một tập tin, bạn cho lôi tập tin thả lên một icon giống như một thùng rác

vì trong thực tế đây là điều bạn thường làm khi tống đi những đồ không còn ích lợi gì nữa

vào xọt rác

Lẽ dĩ nhiên, một vài việc khó lòng truyền đạt thành hình ảnh so với một số khác (thí

du, không ứng dụng nào có thể cung cấp một icon gợi ý “đồng bộ hoá email của tôi”)

Vào lúc mà lĩnh vực GUI xuất hiện, thì việc thiết kế giao diện người sử dụng bắt đầu

được xem như là một khoa học thực thụ

Ta có thể kể ra một vài dấu hiệu chứng thực lĩnh vực GUI:

 Visual clues: Manh mối nhìn thấy được Một nút với đường viền màu xám như

muốn nhảy khỏi cửa sổ - nó giống như có thể ấn xuống được

Trang 35

Real-world analogies: Những tương đồng trong thế giới bên ngoài Một khung

đối thoại với những thẻ (tab) giống như những trang thẻ trong một tập hồ sơ Sticky notes trên Microsoft Outlook giống như những sticky-note (những miếng giấy ghi chú được đính trên bảng đen) Xem hình 1-4 Phần lớn các phần mềm quản lý giao tiếp (contact management) cố gắng bắt chước y chang một tờ lịch treo tường và một cuốn sổ địa chỉ Ý kiến cho rằng người sử dụng đã biết dùng thế nào những đồ vật này trong thế giới thực

Việc học hỏi có thể truyền đạt: Thí dụ, nếu bạn học cách làm thế nào gỡ bỏ một tập tin, chương trình có thể cung cấp một thùng rác (trash can) cho phép bạn

gỡ bỏ một mẫu tin sản phẩm, và bạn có khả năng biết cách sử dụng nó theo bản năng dựa trên sự giống nhau

Tất cả các điểm kể trên thực chất nhằm cố gắng làm cho chương trình lô gic đến nổi hầu như là hành động theo bản năng hoặc theo trực giác Mục đích là đối với một người

sử dụng sẽ không đòi hỏi một sự huấn luyện, mà chỉ cần có khả năng áp dụng những giả định thu lượm được từ những chương trình khác và thế giới bên ngoài khi học sử dụng một ứng dụng mới Lẽ dĩ nhiên, vì ta nhắm vào người sử dụng, nên bạn cần biết rành một

Trang 36

người sử dụng trung bình sẽ nghĩ gì trước khi khi bạn có thể tạo giao diện Ngày nay, triết

lý trên vẫn còn công dụng

Mô hình GUI cung cấp cho lập trình viên khá nhiều tự do (có người bảo là quá nhiều

tự do) Trong thế giới Windows, thiết kế một giao diện người sử dụng loại 1 không dính

dáng chi với việc sáng chế những ẩn dụ mà là tuân thủ những qui ước đã được thiết lập

1.3 Sáng tạo so với Qui ước

Nhiều dự án giao diện người sử dụng đã đi trệch hướng khi các dự án này đem so với

nhu cầu sáng tạo của các nhà triển khai phần mềm Rất tiếc là giao diện GUI của một ứng

dụng không chỉ ấn định dáng vẻ bề ngoài của một chương trình mà còn ấn định cách

chương trình hành động thế nào (hoặc theo quan điểm người sử dụng, cách chương trình

hoạt động thế nào)

Bạn nên tự đặt câu hỏi như sau: các nhà sản xuất xe hơi có thể nào cho phép cùng

một mức độ tự do về sáng tạo mà vài vị triển khai phần mềm đã thực hiện trong việc thiết

kế ứng dụng? Thiên hạ ai cũng tin tưởng vào sự an toàn của xe hơi (và tính nghiêm trọng

nếu xảy ra sai lầm) nên khó tưởng tượng là nhà sản xuất xe hơi cho phép một loại tự do

như thế Mỗi năm, các kiểu xe mới ra đời dưới sự “vặn vẹo” của đám kỹ sư thiết kế với

sự hứa hẹn táo bạo cho rằng các xe này hoàn toàn mới và hiện đại Chả cần xem xét kỹ

cũng biết là máy điều hoà không khí hoặc radio bao giờ cũng hoạt động giống như trước;

tay lái trông giống và hoạt động đúng như thuở nào; ghế ngồi thường thì không thay đổi;

và việc điều khiển khởi động xe, dừng xe cũng như chạy chậm chậm khó lòng phân biệt

Người lái xe bình thường có thể nhắm mắt lại và có thể nhận biết đâu là ổ khoá đề xe

Kể cả những ứng dụng tốt nhất của ngày hôm nay, rất hiếm có tính nhất quán vừa kể

trên Nếu bạn cho cài đặt một chương trình mới trên máy tính của bạn, bạn có chắc chắn

là tổ hợp phím <Ctrl+S> sẽ cho cất trữ tập tin của bạn hay không? Lệnh trình đơn File |

Print có chắc chuyển tài liệu của bạn ra máy in ngay liền hay là bạn phải thực hiện vài

cuộc vặn vẹo nào đó trước khi in Và đâu là nơi bạn sẽ tìm thấy lệnh trình đơn đối với cửa

sổ quan trọng Preferences hoặc Options … ở Tools, Edit, hoặc File?

Nói một cách ngắn gọn, qui ước là cách người sử dụng học làm việc với vô số phần

mềm khác nhau Vi phạm qui ước bằng cách này hoặc cách khác xem ra thấp so với

những chờ đợi của bạn tất phải thất bại Nó chỉ nhân gấp bội số lượng thông tin mà một

người sử dụng cần biết để sử dụng phần mềm máy tính

1.3.1 Tính nhất quán trên NET

Microsoft không giấu giếm một trong những mục tiêu của sàn diễn NET là làm cho

mô hình lập trình nhất quán hơn đối với những lập trình viên khác nhau Bạn có thể thấy

Trang 37

điều này trong những ngôn ngữ NET khác nhau; các ngôn ngữ này chia sẻ sử dụng một tập hợp các kiểu dữ liệu và chức năng lấy từ một thư viện lớp được chia sẻ sử dụng Bạn

có thể thấy điều này trong việc sử dụng rộng rãi interface và inheritance, theo đấy làm thế nào các lớp chuyên biệt hoạt động làm cho chúng giông giống các lớp tương tự Bạn có thể thấy thể thức mà Visual Studio NET cho phép bạn sử dụng những công cụ gỡ rối cực mạnh không cần biết bạn đang làm việc với đoạn mã trên một dự án Windows, hoặc trên trang ASP.NET hoặc kể cả trên một thủ tục căn cứ dữ liệu làm sẵn được cất trữ (database stored procedure)

1.3.2 Nguyên tắc “Hành động giống như

Microsoft”

Bí quyết tạo một chương trình mà người sử dụng bình thường có thể hiểu được, kể cả thích thú, là thường chỉ cần sao chép Microsoft càng y chang càng tốt Đây không có nghĩa là Microsoft đã chọn lựa đúng đắn nhất trong các ứng dụng của họ - nhưng đối với phần lớn thì điều này không quan trọng Nếu người sử dụng dùng ứng dụng của bạn, thì chắc chắn là ho đã sử dụng Microsoft Windows, Microsoft Office hoặc Internet Explorer Thật thế, nếu người sử dụng của bạn là những người dùng đều đặn máy tính, thì có thể phần lớn thời gian ngồi trên máy, họ đang sử dụng Word và Excel

Rất hiếm có lý do chính đáng để xa rời khỏi những chuẩn Microsoft đề ra Nếu người

sử dụng trung bình đã học được cái gì đó, thì đấy là những phím gõ thông dụng và tổ chức trình đơn trong một ứng dụng Microsoft Office

Nếu bạn chưa hề tạo một ứng dụng dùng trong văn phòng hoặc dựa trên tài liệu, bạn nên cẩn thận để tâm đến cách thiết kế của Microsoft Hầu hết trên mọi lĩnh vực, Microsoft đều có những thí dụ “dày dạn kinh nghiệm” Trong vài trường hợp, có thể bạn nên tham khảo một ứng dụng khác (chẳng hạn Adobe Photoshop trong lĩnh vực đồ họa) nhưng thường thì chuẩn nằm ở Microsoft

1.3.3 Các trình tiện ích hành chánh

Một thí dụ tốt của một Windows qui ước mà ta có thể tìm thấy là trong thiết kế của Microsoft liên quan đến các trình tiện ích hệ thống và quản lý hành chính Các trình tiện

ích này hầu như bao giờ cũng dùng cặp ô control ListView và TreeView, gần giống như

Windows Explorer Trong Windows 2000 và các hệ điều hành sau này, Microsoft sử dụng cách thiết kế này mọi nơi khi có thể, kể cả trong việc cấu hình hoá phần cứng máy tính cũng như quản lý người sử dụng (hình 1-5):

Trang 38

Loại thiết kế này có những đóng góp đáng kể Trước tiên, có thể thấy dễ dàng cách

các item liên hệ thế nào TreeView cho gợi ý các cấp bậc cơ bản về gộp theo nhóm

(grouping) cũng như gộp theo nhóm phụ (subgrouping) Thường bạn có thể thêm nhiều

cấp bậc TreeView để phối hợp các tính năng (feature) có thể nằm rải rác trên nhiều cửa

sổ khác nhau Bạn cũng có thể thu thập một số lớn thông tin mà khỏi rời xa cửa sổ

Khung cửa ListView có thể được thích nghi cho thấy nhiều kiểu dữ liệu khác nhau mà

không làm tối tăm các ô control lèo lái (navigational control), cho phép người sử dụng

hoạt động thoải mái Cuối cùng nó không ép phải tuân thủ bất cứ trật tự nào để thực hiện

các công tác Ngoài ra, nó cũng sử dụng những icon đồ họa giúp phá vỡ sự đơn điệu buồn

tẻ của việc số lớn thông tin được hiển thị cùng một lúc

Kiểu thiết kế này cũng có một vài đặc thù (idiosyncrasy) Thí dụ, qui ước trình đơn

thích một trình đơn Action thay vì các trình đơn File và Tools Thỉnh thoảng, các mẫu

tin2 được hiệu đính trên một cửa sổ đặc biệt xuất hiện thay vì ListView, trong khi trong

các trường hợp khác thì một cửa sổ riêng rẽ sẽ bật tung lên (popup) cho phép tiến hành

những thay đổi Nó cũng có quá nhiều tham vọng, và có thể làm lúng túng đối với những

người sử dụng cơ bản không hiểu mối liên hệ giữa ListView và TreeView Do đó, việc

dùng một phong cách giao diện tùy thuộc vào loại người sử dụng bạn nhắm tới

2 Mẫu tin dịch từ chữ records Mẫu ở đây là làm mẫu chứ không phải mẩu bánh

Trang 39

Trong một cố gắng chuẩn hóa, thiết kế ListView/TreeView này được tìm thấy trong hầu hết các chương trình hiện hành của Microsoft, từ SQL Server đến Visual Studio NET Có một thí dụ ít được biết đến nhưng lại là một chuẩn quan trọng của Microsoft, đó

là framework MMC (Microsoft Management Console) Hiện thời, bạn không thể tạo các ứng dụng MMC trên NET, nhưng bạn có thể theo cách tổ chức và qui ước đối với những trình tiện ích thông dụng cũng như các công tác quản lý chẳng hạn cấu hình hoá người sử dụng hoặc rảo duyệt xem (browse) một căn cứ dữ liệu3 Các chương sau trong tập sách này, bạn sẽ thấy những thí dụ về phong cách đó

Cuối cùng, bạn cần hiểu cả loại ứng dụng lẫn khách hàng sử dụng ứng dụng của bạn Thí dụ, trong khi thiết kế MMC là lý tưởng đối với những công tác cấp cao, Microsoft Office cung cấp những qui tắc kinh điển đối với những ứng dụng dựa trên tài liệu dành cho những người sử dụng ít kinh nghiệm

1.3.4 Hiểu thấu loại ứng dụng của bạn

Nếu bạn không thể nhận diện loại ứng dụng bạn đang tạo ra, bạn sẽ gặp khó khăn dài dài về sau Sau đây là một vài loại ứng dụng phổ biến thông dụng (mà chúng tôi sẽ xem xét đến trong tập sách này):

Trình tiện ích cấu hình hoá (configuration utility): Đây có thể dựa trên một control panel duy nhất hoặc được tổ chức thành một wizard tinh vi hơn

Workspace Đây là một dáng mẫu (pattern) được dùng đến đối với những ứng dụng tinh vi hơn, đặc biệt đối với phần mềm đặc hữu (proprietary software) theo đấy có thể ứng dụng duy nhất được sử dụng trên vài workstation Workspace là một “ứng dụng để bàn - desktop application” cho phối hợp một tập hợp tính năng vào trong một môi trường thông dụng có thể thêm vài loại hiển thị trạng thái (status display)

Trình hiệu đính tài liệu (Document editor): Đây là loại ứng dụng Windows phổ biến nhất

 Monitor Thông thường đây là một chương trình khay hệ thống (system tray

program) lui vào hậu trường, tự động thi hành vài công tác khi được hướng dẫn bởi người sử dụng hoặc khi nhận được thông tri từ hệ điều hành Thí dụ, nó có thể nằm chờ thi hành trên một tập tin và tự động sao hoặc du nhập Nếu bạn

3 Chúng tôi dịch từ database là “căn cứ dữ liệu” chứ không dùng từ “cơ sở dữ liệu” vì từ này dịch sai nhưng lại được dùng khá phổ biến Từ “base” trong database, phải hiểu theo ý nghĩa một “căn cứ không quân” (air base) hoặc căn cứ hải quân, trong khi “cơ sở” lại hiểu theo từ “base” trong toán học, giống như “cơ số 2 – base 2” Bạn cứ thử so sánh hai từ cách mạng: căn cứ địa cách mạng và cơ sở cách mạng nằm vùng thì hiểu ngay ra vấn đề

Trang 40

muốn tương tác với chương trình thì phải thông qua một trình đơn cảnh ứng đối

với system tray icon

Bộ rảo xem dữ liệu (data browser4) Loại này thường được tổ chức như là một

ứng dụng kiểu Windows Explorer liệt kê các mẫu tin cho phép bạn nhìn xem và

nhật tu các mẫu tin

1.3.5 Hiểu thấu người sử dụng của bạn

Nhóm người sử dụng khác nhau đòi hỏi mức độ hỗ trợ khác nhau Người sử dụng rảo

xem nhanh và không nhọc nhằn xuyên mọi ngóc ngách của Windows Registry khi sử

dụng trình tiện ích regedit.exe, thật ra không phải cùng nhóm người dùng phần mềm

Microsoft Agent để giúp tạo một biểu đồ Nếu bạn đự định thiết kế một ứng dụng chuyên

nghiệp cho một loại người sử dụng nào đó, thì bạn nên bắt đầu tạo ra một “cung cách

người sử dụng” (user profile) nhận diện rõ ràng những khả năng, những chờ đợi và mức

độ thoải mái trên máy tính của người sử dụng đầu cuối

Tuy nhiên, nguyên tắc “biết người biết ta” thường xuyên được dùng như là một cái

chống đở bào chữa cho những giao diện phức tạp dựa trên những đòi hỏi tưởng tượng của

những người sử dụng chuyên nghiệp Như là một qui tắc, ta có khả năng thiết kế một giao

diện phối hợp những bước đi tắt của người sử dụng tiềm năng và việc hướng dẫn đối với

người sử dụng lần đầu làm quen Những người sử dụng ứng dụng của bạn sẽ có những

nhu cầu khác nhau khi lần đầu tiên họ sử dụng phần mềm (hoặc đánh giá cho một mua

sắm tiềm năng) so với lúc họ đã nắm vững việc sử dụng phần mềm như là thành phần

công việc thường nhật của họ Một giao diện tốt thường nhận ra những thách thức này, và

giúp hướng dẫn người sử dụng càng nhiều càng tốt nhưng vẫn không che khuất chức

năng phần mềm Thí dụ, thử xem Microsoft Word, theo đấy những người sử dụng tập

tễnh sẽ tìm lối đi sử dụng các trình đơn như là đầu mối, còn những người sử dụng bậc

trung thì tiết kiệm những cú click bằng cách dùng icon trên thanh công cụ (toolbar icon),

còn người sử dụng dày kinh nghiệm thì lại muốn chạy nhanh bằng cách sử dụng shortcut

key và kỹ thuật lôi thả Không những giao diện phải thụ lý nhiều cấp người sử dụng khác

nhau, mà nó phải giúp người sử dụng nâng hiểu biết từ cấp dưới lên cấp trên, vì nút thanh

công cụ khớp với các lệnh trình đơn, và tựa đề trình đơn bao gồm các shortcut key

Nghệ thuật lớn nhất trong việc thiết kế giao diện người sử dụng là tạo những ứng

dụng có thể được dùng hữu hiệu bởi những người sử dụng trình độ khác nhau Muốn nắm

bắt nghệ thuật này, bạn cần hiểu đâu thì phải hạn chế, và làm thế nào thụ lý sự phức tạp

4 Browser thường được dịch là trình duyệt Thật sự từ browse có nghĩa là cho rảo qua (chẳng hạn lật các trang

sách) để xem, chứ chả có chi là duyệt với không duyệt Do đó, chúng tôi dịch browser là “bộ rảo xem”

Ngày đăng: 07/03/2018, 03:55

TỪ KHÓA LIÊN QUAN

w