Tải bản đầy đủ (.pdf) (683 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.29 MB, 683 trang )


Lập trình
GIAO DIỆN NGƯỜI DÙNG
theo C#
Lập trình Visual C# thế nào?


DƯƠNG QUANG THIỆN
Biên soạn

.NET Toàn tập
Tập 1

C# căn bản
và Visual Studio .NET IDE
Lập trình Visual C# thế nào?

NHÀ XUẤT BẢN TỔNG HỢP TP. HCM



5

Dương Quang Thiện

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



Mục lục
2.1.2.2
2.1.2.3
2.1.2.4
2.1.2.5

6
Các lớp.............................................................................49
Delegates .........................................................................50
Enumerations ....................................................................50
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


7

Dương Quang Thiện

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


Mục lục

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


9

Dương Quang Thiện

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
6.1

Tìm hiểu về Windows Form Control

Tìm hiểu Windows Forms Control Hierarchy ......................... 244

6.2 Các loại ô control ...................................................................... 245


Mục lục

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


11

Dương Quang Thiện

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


Mục lục

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


13
9.1.1
9.1.2
9.1.3
9.1.4

Dương Quang Thiện
Design-time Attributes ........................................................... 424

Căn bản về Serialization ......................................................... 427
Toolbox Bitmap ..................................................................... 428
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


Mục lục

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


15

Dương Quang Thiện
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


Mục lục

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



17

Dương Quang Thiện

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


Mục lục

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


19


Dương Quang Thiện

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 16bit) 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à
“form inheritance” một kỹ thuật mới.


Mục lục

Chương 7

20

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


21

Dương Quang Thiện

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
Chương 2
Chương 3
Chương 4
Chương 5
Chương 6

Visual C# và .NET Framework
Bắt đầu từ đây ta tiến lên!
Sử dụng Debugger thế nào?
Căn bản Ngôn ngữ C#

Lớp và Đối tượng
Kế thừa và Đa hình

Chương 7
Chương 8

Nạp chồng tác tử
Cấu trúc Struct

Chương 9

Giao diện


Mục lục
Chương 10
Chương 11
Chương 12
Chương 13
Chương 14

22
Bản dãy, Indexers và Collections
Chuỗi chữ và biểu thức regular
Thụ lý các biệt lệ
Ủy thác và tình huống
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

Chương 2
Chương 3
Chương 4
Chương 5
Chương 6
Chương 7
Chương 8
Chương 9

Input/Output và Object serialization
Xây dựng một ứng dụng Windows
Tìm hiểu về Assembly và cơ chế Version
Tìm hiểu về Attribute và Reflection
Marshalling và Remoting
Mạch trình và Đồng bộ hoá
Tương tác với unmanaged code
Lập trình ứng dụng Web
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
Chương 2
Chương 3
Chương 4
Chương 5
Chương 6
Chương 7
Chương 8
Chương 9
Chương 10

Chương 11
Chương 12
Chương 13
Chương 14

Tạo giao diện người sử dụng dùng lại được
Thiết kế giao diện theo lớp và theo tầng nấc
Tìm hiểu đồ hoạ và GDI+
Tìm hiểu về biểu mẫu và lớp Form
Cơ bản về lớp Control
Tìm hiểu về Windows Forms Controls
Các ô control tiên tiến
Các ô custom control
Hỗ trợ Custom Control vào lúc thiết kế
MDI Interfaces và Workspace
Dynamic User Interfaces
Tìm hiểu về Data Controls
GDI+ Controls
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


23

Dương Quang Thiện
Chương 2
Chương 3

Chương 4
Chương 5
Chương 6
Chương 7
Chương 8
Chương 9
Chương 10
Chương 11
Chương 12
Chương 13

Tập V:
Chương 1
Chương 2
Chương 3
Chương 4
Chương 5
Chương 6
Chương 7
Chương 8
Chương 9
Chương 10
Chương 11
Chương 12
Chương 13
Chương 14
Chương 15
Chương 16

Tập VI:

Chương 01
Chương 02
Chương 03
Chương 04
Chương 05
Chương 06
Chương 07

Tổng quan về ADO .NET
Data Component trong Visual Studio .NET
Các lớp ADO.NET tách rời
ADO.NET Data Providers
Trình bày IDE theo quan điểm Database
Làm việc với XML
Triển khai ứng dụng Web sử dụng ADO.NET
Sử dụng các dịch vụ Web với ADO.NET
Thụ lý các tình huống trên ADO.NET
Stored procedure và View
Làm việc với Active Directory
Làm việc với ODBC.NET data provider

Lập trình ASP.NET & Web
ASP.NET và NET Framework
Tìm hiểu các tình huống
Tìm hiểu các ô Web Control
Chi tiết về các ASP Control
Lập trình Web Form
Kiểm tra hợp lệ
Gắn kết dữ liệu
List-Bound Control - Phần 1

Truy cập căn cứ dữ liệu với ADO.NET
ADO.NET Data Update
List-Bound Control - Phần II
User Control và Custom Control
Web Services
Caching và Năng suất
An toàn
Triển khai ứng dụng

Lập trình các báo cáo dùng
Crystal Reports .NET
Tổng quan về Crystal Reports .Net
Hãy thử bắt đầu với Crystal Reports .NET
Tìm hiểu Crystal Reports Object Model
Sắp xếp & Gộp nhóm
Sử dụng các thông số
Uốn nắn các báo cáo
Tìm hiểu về Công thức & Lô gic chương trình


Mục lục
Chương 08
Chương 09
Chương 10
Chương 11
Chương 12
Chương 13
Chương 14
Chương 15


Tập VII:

24
Vẽ biểu đồ thế nào?
Tạo báo cáo Cross-Tab
Thêm Subreports vào báo cáo chính
Hội nhập báo cáo vào ứng dụng Windows
Hội nhập báo cáo vào ứng dụng Web
Tạo XML Report Web Services
Làm việc với các dữ liệu nguồn
Xuất khẩu và triển khai hoạt động các báo cáo

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


25

Dương Quang Thiện

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.


×