Giáo trình môn Ngôn ngữ lập trình Visual Basic

pdf 158 trang phuongnguyen 5620
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình môn Ngôn ngữ lập trình Visual Basic", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_mon_ngon_ngu_lap_trinh_visual_basic.pdf

Nội dung text: Giáo trình môn Ngôn ngữ lập trình Visual Basic

  1. Visual Basic CHƯƠNG 1 TỔNG QUAN VỀ VISUAL BASIC 6.0 Mục tiêu: Chương này giới thiệu về mơi trường phát triển tích hợp (IDE) Microsoft Visual Basic 6.0; cũng như giúp sinh viên cĩ cái nhìn tổng quan về Visual Basic. Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau: - Sử dụng mơi trường phát triển tích hợp VB 6.0 để phát triển ứng dụng. - Cách tạo dự án mới (New Project) trong VB 6.0. Kiến thức cĩ liên quan: - Sử dụng hệ điều hành Windows. Tài liệu tham khảo: - Visual Basic 6 Certification Exam Guide - Chapter 1, Page 1 - Dan Mezick & Scot Hillier - McGraw-Hill - 1998. Trang 1
  2. Visual Basic I. Giới thiệu về Visual Basic 6.0 Visual Basic 6.0 (VB6) là một phiên bản của bộ cơng cụ lập trình Visual Basic (VB), cho phép người dùng tiếp cận nhanh cách thức lập trình trên mơi trường Windows. Những ai đã từng quen thuộc với VB thì tìm thấy ở VB6 những tính năng trợ giúp mới và các cơng cụ lập trình hiệu quả. Người dùng mới làm quen với VB cũng cĩ thể làm chủ VB6 một cách dễ dàng. Với VB6, chúng ta cĩ thể : ƒ Khai thác thế mạnh của các điều khiển mở rộng. ƒ Làm việc với các điều khiển mới (ngày tháng với điều khiển MonthView và DataTimePicker, các thanh cơng cụ cĩ thể di chuyển được CoolBar, sử dụng đồ họa với ImageCombo, thanh cuộn FlatScrollBar, ). ƒ Làm việc với các tính năng ngơn ngữ mới. ƒ Làm việc với DHTML. ƒ Làm việc với cơ sở dữ liệu. ƒ Các bổ sung về lập trình hướng đối tượng. II. Cài đặt Visual Basic 6.0 Sử dụng chương trình Setup, người dùng cĩ thể cài đặt VB6 lên máy tính của mình. Chương trình Setup này cịn cài đặt các tập tin cần thiết để xem tài liệu trên đĩa CD MSDN (Microsoft Developer Network). Nếu cần, người dùng cĩ thể cài đặt riêng phần tài liệu và ví dụ mẫu của Visual Basic lên máy tính. Để cài đặt VB6, người dùng nên kiểm tra máy tính của mình đảm bảo được cấu hình tối thiểu. Các yêu cầu hệ thống tối thiểu : - Microsoft Windows 95 trở lên hoặc là Microsoft Windows NT Workstation 4.0 trở lên. - Tốc độ CPU 66 MHz trở lên. - Màn hình VGA hoặc màn hình cĩ độ phân giải cao được hỗ trợ bởi Microsoft Windows. - 16 MB RAM cho Microsoft Windows 95 hoặc 32MB RAM cho Microsoft Windows NT Workstation. III. Làm quen với VB6 III.1 Bắt đầu một dự án mới với VB6 Từ menu Start chọn Programs, Microsoft Visual Basic 6.0. Khi đĩ bạn sẽ thấy màn hình đầu tiên như hình I.1 dưới đây. Trang 2
  3. Visual Basic Hình I.1 Cửa sổ khi kích hoạt VB6 Ở đây, người dùng cĩ thể chọn tạo mới một dự án Chọn thực thi được bằng cách chọn Standard EXE rồi nhấp Open (Hình I.2). Tiếp theo là cửa sổ làm việc chính của VB6, gọi tắt là IDE (Integrated Development Environment) sẽ được giới thiệu chi tiết trong phần sau. III.2 Tìm hiểu các thành phần của IDE IDE là tên tắt của mơi trường phát triển tích hợp (Integrated Development Environment), đây là nơi tạo ra các chương trình Visual Basic. IDE của Visual Basic là nơi tập trung các menu, thanh cơng cụ và cửa sổ để tạo ra chương trình. Mỗi một thành phần của IDE cĩ các tính năng ảnh hưởng đến các hoạt động lập trình khác nhau. Trang 3
  4. Visual Basic Hình I.3 Cửa sổ IDE của VB6 Thanh menu cho phép bạn tác động cũng như quản lý trực tiếp trên tồn bộ ứng dụng. Bên cạnh đĩ thanh cơng cụ cho phép truy cập các chức năng của thanh menu thơng qua các nút trên thanh cơng cụ. Các biểu mẫu (Form) - khối xây dựng chương trình chính của VB - xuất hiện trong cửa sổ Form. Hộp cơng cụ để thêm các điều khiển vào các biểu mẫu của đề án. Cửa sổ Project Explorer hiển thị các đề án khác nhau mà người dùng đang làm cũng như các phần của đề án. Người dùng duyệt và cài đặt các thuộc tính của điều khiển, biểu mẫu và module trong cửa sổ Properties. Sau cùng, người dùng sẽ xem xét và bố trí một hoặc nhiều biểu mẫu trên màn hình thơng qua cửa sổ Form Layout. III.3 Sử dụng thanh cơng cụ trong IDE của VB Thanh cơng cụ là tập hợp các nút bấm mang biểu tượng thường đặt dưới thanh menu. Các nút này đảm nhận các chức năng thơng dụng của thanh menu (New, Open, Save ). Hình I.4 Thanh cơng cụ ở dạng standard Trang 4
  5. Visual Basic Hơn nữa, người dùng cĩ thể kéo rê thanh cơng cụ trên IDE đến vị trí bất kỳ nào đĩ thuận tiện cho việc sử dụng. Người dùng cĩ thể thêm hay xĩa thanh cơng cụ trên IDE: * Chọn Toolbars từ menu View hoặc ấn chuột phải vào điểm bất kỳ nào trên thanh menu, một popup menu bật ra. * Chọn loại thanh cơng cụ mà ta muốn thêm vào hoặc xĩa đi. Nếu cĩ đánh dấu check ở bên trái thì loại cơng cụ Hình I.5 Popup menu đĩ đang được chọn. thêm, xĩa cơng cụ Sử dụng thanh cơng cụ gỡ rối (debug) Với thanh cơng cụ gỡ rối, người dùng cĩ thể thực thi, tạm ngưng hoặc dừng một đề án. Với thanh cơng cụ Debug, người dùng cĩ thể kiểm tra chương trình và giải quyết các lỗi cĩ thể xảy ra. Khi gỡ rối chương trình, người dùng cĩ thể chạy Hình I.6 Thanh cơng cụ gỡ rối từng dịng lệnh, kiểm tra giá trị các biến, dừng chương trình tại một điểm nào đĩ hoặc với một điều kiện nào đĩ. Sử dụng thanh cơng cụ Edit Thanh cơng cụ Edit được dùng để viết chương trình trong cửa sổ Code, thanh cơng cụ Edit cĩ đầy đủ các tính năng của menu Edit. Ngồi ra người sử dụng cĩ thể sử dụng chức năng Hình I.7 Thanh cơng cụ Edit viết chương trình tự động như là Quick Info. Thanh cơng cụ Edit của VB6 cĩ tính năng lý thú đĩ là tự hồn tất các từ khĩa. Tính năng này rất hữu dụng giúp cho người dùng tránh các lỗi mắc phải do gõ sai từ khĩa. Sử dụng thanh cơng cụ Form Editor Hình I.8 Thanh cơng cụ thiết kế biểu mẫu Thanh cơng cụ Form Editor cĩ chức năng giống như menu Format dùng để di chuyển và sắp xếp các điều khiển trên biểu mẫu. Trang 5
  6. Visual Basic Trong quá trình thiết kế biểu mẫu, đơi khi chúng ta phải sử dụng thuộc tính ZOrder để cho phép một điều khiển cĩ thể thay thế một điều khiển khác hay khơng hoặc là xuất hiện bên trên một điều khiển khác hay khơng. Sử dụng hộp cơng cụ (Toolbox) Hộp cơng cụ là nơi chứa các điều khiển được dùng trong quá trình thiết kế biểu mẫu. Các điều khiển được chia làm hai loại: Điều khiển cĩ sẵn trong VB và các điều khiển được chứa trong tập tin với phần mở rộng là .OCX. Đối với các điều khiển cĩ sẵn trong VB thì ta khơng thể gỡ bỏ khỏi hộp cơng cụ, trong khi đĩ đối với điều khiển nằm ngồi ta cĩ thêm hoặc xĩa bỏ khỏi hộp cơng cụ. Một điều khiển cĩ thể được đưa vào biểu mẫu bằng cách chọn điều khiển đĩ và đưa vào biểu mẫu. Chúng ta sẽ trở lại phần này trong chương tiếp theo khi thiết kế các biểu mẫu. Hình I.9 Hộp cơng cụ của Visual Basic III.4 Quản lý ứng dụng với Project Explorer Project Explorer trong VB6 giúp quản lý và định hướng nhiều đề án.VB cho phép nhĩm nhiều đề án trong cùng một nhĩm. Người dùng cĩ thể lưu tập hợp các đề án trong VB thành một tập tin nhĩm đề án với phần mở rộng .vbp. Project Explorer cĩ cấu trúc cây phân cấp như cây thư mục trong cửa sổ Explorer của hệ điều hành. Các đề án cĩ thể được coi là gốc của cây, các thành phần của đề án như biểu mẫu, module là các nút của cây. Khi muốn làm việc với thành phần nào thì ta cĩ thể nhấn đúp lên thành phần đĩ trên cửa sổ Project Explorer để vào cửa sổ viết code cho Hình I.10 Cửa sổ Project Explorer thành phần đĩ. Khi làm việc với một dự án lớn, chúng ta sẽ thấy Project Explorer cực kỳ hữu ích cho việc tổ chức và quản lý một dự án lớn. III.5 Cửa sổ Properties Mỗi một thành phần, điều khiển điều cĩ nhiều thuộc tính. Mỗi một thuộc tính lại cĩ một hoặc nhiều giá trị. Cửa sổ Properties cho phép người dùng xem, sửa đổi giá trị các thuộc tính của điều khiển nhằm giúp điều khiển hoạt động theo đúng ý đồ của người sử dụng. Trang 6
  7. Visual Basic III.6 Cửa sổ Form Layout Đây chính là cửa sổ trình bày biểu mẫu cho phép định vị trí của một hoặc nhiều biểu mẫu trên màn hình khi chương trình ứng dụng được thi hành. Ta định vị một biểu mẫu trên màn hình bằng cách dùng chuột di chuyển biểu mẫu trong cửa sổ Form Layout. Sử dụng cửa sổ Form Layout khơng đơn giản như các cửa sổ khác vì nĩ khơng được kích hoạt sẵn, người dùng cần phải chạy ứng dụng sau đĩ mới cĩ thể bố trí được các biểu mẫu thơng qua Form Layout. Nếu ta khơng định vị các biểu mẫu thì vị trí của biểu mẫu trên màn hình lúc thiết kế cũng là vị trí khởi động của biểu mẫu khi thực thi. Hình I.12 Cửa sổ Form III.7 Biên dịch đề án thành tập tin thực thi LtSau khi đề án đã hồn thành, người dùng cĩ thể biên dịch thành tập tin thực thi được. Cách tiến hành như sau: - Trước tiên ta cần chỉ cho VB6 biết phần chương trình nào sẽ được thực thi trước bằng cách chọn Project Properties từ menu Project. Chọn tab General, chú ý phần Startup Object, đây là nơi quy định điểm khởi đầu của chương trình sau khi biên dịch kết thúc. - Từ menu File, chọn Make EXE Một hộp thoại xuất hiện cho phép bạn nhập vào tên của tập tin thực thi. Bạn chỉ cần gõ tên tập tin, VB sẽ tự động thêm phần mở rộng .EXE. - Nhấn vào nút Options để mở hộp thoại Project Properties và điền tên của ứng dụng vào ơ Title, ta cĩ thể ghi chú thơng tin cho từng phiên bản trong phần Version Information. Ta cĩ thể chọn Auto Increment để VB tự động tăng số Revision mỗi lần ta tạo lại tập tin EXE cho dự án. - Cuối cùng, nhấn OK để trở về hộp thoại Make Project. Trang 7
  8. Visual Basic CHƯƠNG 2 BIỂU MẪU VÀ MỘT SỐ ĐIỀU KHIỂN THƠNG DỤNG Mục tiêu: Chương này giới thiệu về một số điều khiển cơ bản để tạo nên giao diện cho các ứng dụng cũng như một số khái niệm trong lập trình với VB; những yêu cầu tối thiểu cần cĩ trong việc “lập trình sự kiện” với VB. Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau: - Khái niệm về điều khiển, thuộc tính, phương thức, sự kiện. - Quy tắc đặt tên danh biểu trong VB. - Sử dụng biểu mẫu trong thiết kế giao diện. - Sử dụng điều khiển ơ nhập liệu, nút nhấn, nhãn, khung. Kiến thức cĩ liên quan: - Cách thức sử dụng mơi trường phát triển VB. Tài liệu tham khảo: - Microsoft Visual Basic 6.0 và Lập trình Cơ sở dữ liệu - Chương 2, trang 26; Chương 3, trang 29 - Nguyễn Thị Ngọc Mai (chủ biên), Nhà xuất bản Giáo dục - 2000. Trang 8
  9. Visual Basic I. Các khái niệm 9 Điều khiển: Các thành phần cĩ sẵn để người lập trình tạo giao diện tương tác với người dùng. Mỗi điều khiển thực chất là một đối tượng, do vậy nĩ sẽ cĩ một số điểm đặc trưng cho đối tượng, chẳng hạn như các thuộc tính, các phương thức & các sự kiện. 9 Thuộc tính: Các đặc trưng của một điều khiển tạo nên dáng vẻ của điều khiển đĩ. 9 Phương thức: Các điều khiển cĩ thể thực thi một số tác vụ nào đĩ, các tác vụ này được định nghĩa sẵn bên trong các phương thức (cịn gọi là chương trình con: hàm & thủ tục), người lập trình cĩ thể gọi thực thi các phương thức này nếu cần. 9 Sự kiện: là hành động của người dùng tác động lên ứng dụng đang thực thi. Thí dụ: - Nhấn phím bất kỳ trên bàn phím. - Nhấp chuột. Các thành phần giao diện cĩ khả năng đáp ứng lại sự kiện. Chẳng hạn khi chúng ta nhấp chuột vào button, lúc đĩ button nhận biết được sự kiện này; hay như textbox nhận biết được sự kiện bàn phím tác động lên nĩ. Một ứng dụng trên Windows thường được thực hiện nhờ vào việc đáp ứng lại các sự kiện của người dùng. 9 Lập trình sự kiện: Các thành phần giao diện cĩ khả năng nhận biết được các sự kiện từ phía người dùng. Tuy nhiên khả năng đáp ứng lại các sự kiện được thực hiện bởi người lập trình. Khi một thành phần giao diện được sử dụng, người lập trình phải xác định chính xác hành động của thành phần giao diện đĩ để đáp ứng lại một sự kiện cụ thể. Lúc đĩ người lập trình phải viết đoạn mã lệnh mà đoạn mã lệnh này sẽ được thực thi khi sự kiện xảy ra. Chẳng hạn, trong ứng dụng Paint của Windows; khi người sử dụng nhấp chuột vào nút vẽ hình elip sau đĩ dùng chuột vẽ nĩ trên cửa sổ vẽ, một hình elip được vẽ ra. Trong lập trình sự kiện, một ứng dụng được xây dựng là một chuỗi các đáp ứng lại sự kiện. Tất cả các hành động của ứng dụng là đáp ứng lại các sự kiện. Do vậy người lập trình cần phải xác định các hành động cần thiết của ứng dụng; phân loại chúng; sau đĩ viết các đoạn mã lệnh tương ứng. Thí dụ về đáp ứng lại sự kiện: Mã lệnh - Mã lệnh cho sự kiện Click của Ghi đĩa. - Mã lệnh cho sự kiện Click của In giấy Hình II.1: Thí dụ về đáp ứng sự kiện Trang 9
  10. Visual Basic - Khi người dùng khơng tác động vào ứng dụng, ứng dụng khơng làm gì cả. - Khi người dùng nhập dữ liệu vào các ơ nhập Họ và tên, Địa chỉ; sự kiện bàn phím xảy ra trên các ơ nhập. Tuy nhiên, ứng dụng vẫn khơng làm gì cả vì khơng cĩ đoạn mã lệnh nào đáp ứng các sự kiện này. - Khi người dùng nhấp nút chọn Ghi đĩa, ứng dụng tìm kiếm trong mã lệnh của mình thấy cĩ đoạn mã lệnh đáp ứng lại sự kiện này; lúc đĩ đoạn mã lệnh được thực thi. - Tương tự như vậy đối với nút chọn In giấy. 9 Cách xác lập các thuộc tính & các phương thức trong chương trình . . [( )] 9 Tên điều khiển (thuộc tính Name) Đây là thuộc tính xác định tên của điều khiển trong ứng dụng. Tên này được đặt theo quy tắc: o Tên cĩ thể dài từ 1 - 40 ký tự. o Tên phải bắt đầu với ký tự chữ, cĩ thể chữ hoa hay thường. o Sau ký tự đầu tiên, tên cĩ thể chứa ký tự, số hay dấu gạch dưới. Ví dụ: Num, StudentCode, Class12A2 là những tên hợp lệ. 345, 7yu là nhữg tên khơng hợp lệ. II. Biểu mẫu (Form) II.1. Khái niệm: Chương trình ứng dụng giao tiếp với người dùng thơng qua các biểu mẫu (hay cịn gọi là cửa sổ, xuất phát từ chữ Form hay Windows); các điều khiển (Control) được đặt lên bên trên giúp cho biểu mẫu thực hiện được cơng việc đĩ. Biểu mẫu là các cửa số được lập trình nhằm hiển thị dữ liệu và nhận thơng tin từ phía người dùng. II.2. Thuộc tính o Name: thuộc tính này như là một định danh nhằm xác định tên của biểu mẫu là gì? Ta sẽ sử dụng thuộc tính này để truy xuất đến các thuộc tính khác cùng với phương thức cĩ thể thao tác được trên biểu mẫu. o Caption: chuỗi hiển thị trên thanh tiêu đề của biểu mẫu. o Icon: hình icon được dùng trong thanh tiêu đề của biểu mẫu, nhất là khi biểu mẫu thu nhỏ lại. o WindowState: xác định biểu mẫu sẽ cĩ kích thước bình thường (Normal=0), hay Minimized (=1), Maximized =(2). Trang 10
  11. Visual Basic o Font: xác lập Font cho biểu mẫu. Thuộc tính này sẽ được các điều khiển nằm trên nĩ thừa kế. Tức là khi ta đặt một điều khiển lên biểu mẫu, thuộc tính Font của điều khiển ấy sẽ tự động trở nên giống y của biểu mẫu. o BorderStyle: xác định dạng của biểu mẫu. II.3. Phương thức o Move: di chuyển biểu mẫu đến tọa độ X,Y: Move X, Y. II.4. Sự kiện o Form_Initialize: Sự kiện này xảy ra trước nhất và chỉ một lần thơi khi ta tạo ra thể hiện đầu tiên của biểu mẫu. Ta dùng sự kiện Form_Initialize để thực hiện những gì cần phải làm chung cho tất cả các thể hiện của biểu mẫu này. o Form_Load: Sự kiện này xảy ra mỗi lần ta gọi thể hiện một biểu mẫu. Nếu ta chỉ dùng một thể hiện duy nhất của một biểu mẫu trong chương trình thì Form_Load coi như tương đương với Form_Initialize. Ta dùng sự kiện Form_Load để khởi tạo các biến, điều khiển cho các thể hiện của biểu mẫu này. o Form_Activate: Mỗi lần một biểu mẫu được kích hoạt (active) thì một sự kiện Activate phát sinh. Ta thường dùng sự kiện này để cập nhật lại giá trị các điều khiển trên biểu mẫu. o Form_QueryUnload: Khi người sử dụng chương trình nhấp chuột vào nút X phía trên bên phải để đĩng biểu mẫu thì một sự kiện QueryUnload được sinh ra. Đoạn chương trình con dưới đây mơ tả thủ tục xử lý sự kiện QueryUnload. Private Sub Form_QueryUnload(Cancel As Integer, _ UnloadMode As Integer) End Sub Sự kiện này cho ta khả năng hủy bỏ hành động đĩng biểu mẫu bằng cách đặt lại Cancel là 1. o Form_Resize: Sự kiện này xảy ra mỗi khi biểu mẫu thay đổi kích thước. III. Nhãn (Label) III.1. Khái niệm: Nhãn là điều khiển dạng đồ họa cho phép người sử dụng hiển thị chuỗi ký tự trên biểu mẫu nhưng họ khơng thể thay đổi chuỗi ký tự đĩ một cách trực tiếp. Biểu tượng (shortcut) trên hộp cơng cụ: III.2. Thuộc tính: o Name: Đây là một tên xác định một định danh, người lập trình cĩ thể thay đổi tên này theo cách của mình để tiện sử dụng. Trang 11
  12. Visual Basic o Caption: Thuộc tính quy định chuỗi ký tự hiển thị khi ta tạo một điều khiển nhãn. Khi ta tạo mới một điều khiển thì thuộc tính Caption cĩ giá trị mặc nhiên là “Label ”. Ví dụ: Ta muốn tạo một nhãn là “Chào mừng bạn đến với Visual Basic”, ta thay đổi giá trị của thuộc tính Caption thành “Chào mừng bạn đến với Visual Basic”. Ta cĩ thể thay đổi giá trị của thuơc tính Caption tại thời điểm ứng dụng đang chạy nhờ vào đoạn mã lệnh đơn giản như sau: L1.Caption = "Đã đổi giá trị Caption" với L1 là tên của điều khiển nhãn mà ta muốn đổi. o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị. o BackStyle, BackColor: BackStyle quy định là nhãn trong suốt hay khơng. BackColor quy định màu nền của nhãn trong trường hợp khơng trong suốt. III.3. Phương thức: o Move: di chuyển nhãn đến tọa độ X,Y: Move X, Y. III.4. Sự kiện: o Change: Xảy ra mỗi khi nhãn thay đổi giá trị. o Click: Mỗi khi nhãn được chuột nhấp lên, sự kiện này xảy ra. o DblClick: Xảy ra khi người sử dụng nhấp đúp chuột lên điều khiển nhãn. IV. Khung (Frame) IV.1. Khái niệm: Khung là một điều khiển dùng trong việc bố trí giao diện của biểu mẫu một cách trong sáng và rõ nét. Thơng thường các điều khiển cùng phục vụ cho một cơng việc nào đĩ sẽ được đặt trong một khung nhằm làm nổi bật vai trị của chúng. Biểu tượng (shortcut) trên hộp cơng cụ: Khi chúng ta tạo mới một khung để chứa các điều khiển khác, ta cĩ hai cách thực hiện: - Tạo khung chứa trước, sau đĩ đưa các điều khiển vào trong khung chứa. Đây là cách đơn giản nhất. - Tạo khung chứa sau khi đã tạo mới các điều khiển, khi đĩ khung chứa sẽ che mất các điều khiển, vì vậy ta cần phải đưa khung chứa ra sau các điều khiển bằng cách nhấp chuột phải và chọn Send to Back. Nhưng đối với cách này, các điều khiển khác khơng nằm trên khung chứa. Do vậy ta cĩ thể giải quyết bằng cách cắt (Cut) các điều khiển này đi, sau đĩ dán (Paste) vào trong khung chứa. Trang 12
  13. Visual Basic Hình II.2 Ví dụ về khung chứa (Frame) IV.2. Thuộc tính: Khung cũng cĩ các thuộc tính thơng dụng như của điều khiển nhãn chẳng hạn như: Name, Caption, IV.3. Phương thức: o Move: di chuyển khung đến tọa độ X,Y: Move X, Y. IV.4. Sự kiện: o Click, DblClick: xảy ra khi khung nhận được một thao tác nhấp (nhấp đúp) chuột. V. Nút lệnh (Command Button) V.1. Khái niệm: Nút lệnh là một điều khiển dùng để bắt đầu, ngắt hoặc kết thúc một quá trình. Khi nút lệnh được chọn thì nĩ trơng như được nhấn xuống, do đĩ nút lệnh cịn được gọi là nút nhấn (Push Button). Người sử dụng luơn cĩ thể chọn một nút lệnh nào đĩ bằng cách nhấn chuột trên nút lệnh đĩ. Biểu tượng (shortcut) trên hộp cơng cụ: V.2. Thuộc tính: o Name: sử dụng như một định danh nhằm xác định tên của nút lệnh. o Caption: Dùng để hiển thị một chuỗi nào đĩ trên nút lệnh. o Default: Nếu giá trị của thuộc tính này là True thì ta cĩ thể chọn nút lệnh bằng cách nhấn phím Enter. o Cancel: Nếu giá trị của thuộc tính này là True thì ta cĩ thể chọn nút lệnh nào đĩ bằng cách nhấn phím ESC. o Enabled: Trong một biểu mẫu, cĩ thể cĩ nhiều nút lệnh để thực hiện nhiều cơng việc khác nhau và tại một thời điểm nào đĩ ta chỉ được phép thực hiện một số cơng việc. Nếu giá trị thuộc tính Enabled là False thì nút lệnh đĩ khơng cĩ tác dụng. Giá trị mặc định của thuộc tính này là True. Ta cĩ thể thay đổi giá trị của thuộc tính tại thời điểm chạy ứng dụng. Trang 13
  14. Visual Basic o ToolTipText: cho phép hiển thị một đoạn văn bản chú thích cơng dụng của nút lệnh khi người sử dụng dùng chuột rê trên nút nhấn. o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị. V.3. Phương thức o Move: di chuyển nút lệnh đến tọa độ X,Y: Move X, Y. V.4. Phương thức o Click: đây là sự kiện thường xảy ra với nút lệnh. Mỗi khi một nút lệnh được chọn, sự kiện này được kích hoạt. Do đĩ, người sử dụng sẽ viết mã các lệnh để đáp ứng lại sự kiện này. Ví dụ: Tạo một biểu mẫu cĩ một ơ nhập liệu với nhãn là họ tên và một nút lệnh cho phép đưa ra câu chào người dùng đĩ. Private Sub Command1_Click() MsgBox "Chao mung ban " & Text1.Text & _ " lam quen voi Visual Basic" End Sub Click here Hình II.3 Sử dụng nút lệnh VI. Ơ nhập liệu (TextBox) VI.1. Khái niệm: Ơ nhập liệu là một điều khiển cho phép nhận thơng tin do người dùng nhập vào. Đối với ơ nhập liệu ta cũng cĩ thể dùng để hiển thị thơng tin, thơng tin này được đưa vào tại thời điểm thiết kế hay thậm chí ở thời điểm thực thi ứng dụng. Cịn thao tác nhận thơng tin do người dùng nhập vào dĩ nhiên là được thực hiện tại thời điểm chạy ứng dụng. Biểu tượng (shortcut) trên hộp cơng cụ VI.2. Thuộc tính: o Name: Đây là tên của ơ nhập liệu, được sử dụng như một định danh. o MaxLength: Thuộc tính quy định số ký tự tối đa cĩ thể nhập vào ơ nhập liệu. Nếu số ký tự nhập vào vượt quá số ký tự tối đa thì chỉ cĩ đúng số ký tự tối đa được ghi nhận vào trong thuộc tính Text. Trang 14
  15. Visual Basic o Text: Dùng để nhập vào thơng tin cần hiển thị trong Textbox tại thời điểm thiết kế hoặc nhận giá trị do người dùng nhập vào tại thời điểm chạy ứng dụng. Ví dụ: MsgBox Text1.Text Đoạn mã này viết trong sự kiện Click của nút lệnh OK. Cho phép hộp thơng báo hiển thị nội dung do người dùng nhập vào ơ nhập liệu. Hình II.3 Ví dụ về điều khiển ơ nhập liệu o Locked: Thuộc tính cho phép người dùng thay đổi nội dung của ơ nhập liệu được hay khơng? Thuộc tính này cĩ thể nhận 2 giá trị True hoặc False. Nếu False thì người dùng cĩ thể thay đổi nội dung của ơ nhập liệu & mặc định thì thuộc tính này cĩ giá trị là False. o PasswordChar: Thuộc tính này quy định cách hiển thị thơng tin do người dùng nhập vào. Chẳng hạn, nếu ta nhập vào giá trị thuộc tính này là * thì các ký tự nhập vào điều hiển thị bởi dấu * . Thuộc tính này thường được dùng trong trường hợp thơng tin nhập vào cần được che giấu (Ví dụ mật khẩu đăng nhập một chương trình ứng dụng nào đĩ mà trong đĩ các người dùng khác nhau thì cĩ các quyền khác nhau). o Multiline: Thuộc tính quy định ơ nhập liệu cĩ được hiển thị thơng tin dưới dạng nhiều hàng hay khơng, nếu là TRUE thì ơ nhập liệu cho phép nhiều hàng. o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị. o SelLength:Cho phép trả về hoặc đặt trước số lượng ký tự được chọn trong ơ nhập liệu. o SelStart: Trả về hoặc xác định điểm bắt đầu của chuỗi được chọn. Đây là vị trí bắt đầu chèn một chuỗi mới trong trường hợp khơng cĩ đánh dấu chọn chuỗi. o SelText: Trả về hoặc xác định chuỗi ký tự được đánh dấu chọn, chỗi trả về sẽ là rỗng nếu như khơng đánh dấu chọn chuỗi nào. Ba thuộc tính SelLength, SelStart, SelText chỉ cĩ tác dụng tại thời điểm chạy ứng dụng. VI.3. Phương thức o Move: Di chuyển ơ nhập liệu đến tọa độ X, Y: Move X, Y. Trang 15
  16. Visual Basic o SetFocus: Phương thức này nhằm mục đích thiết lập cho điều khiển ơ nhập liệu nhận được Focus, nghĩa là nĩ sẵn sàng được tương tác bởi người sử dụng. VI.4. Sự kiện: o KeyPress: xảy ra khi người sử dụng chương trình nhấn một phím. Đối với điều khiển TextBox, ta thường dùng nĩ để lọc (filter out) các phím khơng chấp nhận. Sự kiện KeyPress cho ta một mã Ascii, một số cĩ giá trị từ 0 đến 255, của phím vừa nhấn. Trong ví dụ dưới đây, TextBox Text1 sẽ chỉ nhận biết các phím là số (0 - 9), khơng nhận biết các phím khác: Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii 57 Then ‘ Mã Ascii của 0 là 48, của 9 là 57 KeyAscii = 0 End If End Sub o KeyDown, KeyUp: mỗi sự kiện KeyPress lại cho ta một cặp sự kiện KeyDown/KeyUp. Sự kiện KeyDown/KeyUp cĩ 2 tham số là KeyCode và Shift. Sự kiện này cho phép ta nhận biết được các phím đặc biệt trên bàn phím. Trong ví dụ dưới đây, ta hiển thị tên các phím chức năng mà người sử dụng chương trình nhấn vào: Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer) If (KeyCode >= 112) And (KeyCode <= 123) Then MsgBox "Ban vua nhan phim chuc nang: F" & _ Trim(Str(KeyCode - 111)) End If End Sub CHƯƠNG 3: LẬP TRÌNH CẤU TRÚC TRONG VISUAL BASIC Mục tiêu: Chương này giới thiệu về các cấu trúc lập trình trong VB; đây là các cấu trúc cốt lõi để xây dựng nên một chương trình VB. Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau: - Sử dụng mơi trường lập trình VB để viết mã lệnh. - Các kiểu dữ liệu trong VB. - Cách khai báo hằng, biến trong VB. - Biểu thức trong VB. - Các câu lệnh đơn cũng như các câu lệnh cĩ cấu trúc. - Chương trình con trong VB. - Bẫy lỗi trong VB. Kiến thức cĩ liên quan: - Cách sử dụng mơi trường phát triển của VB. Trang 16
  17. Visual Basic Tài liệu tham khảo: - Microsoft Visual Basic 6.0 và Lập trình Cơ sở dữ liệu - Chương 4, trang 49 - Nguyễn Thị Ngọc Mai (chủ biên), Nhà xuất bản Giáo dục - 2000. Trang 17
  18. Visual Basic I. Mơi trường lập trình I.1. Soạn thảo chương trình: Trong Visual Basic IDE, cửa sổ mã lệnh (Code) cho phép soạn thảo chương trình. Cửa sổ này cĩ một số chức năng nổi bật: o Đánh dấu (Bookmarks): Chức năng này cho phép đánh dấu các dịng lệnh của chương trình trong cửa sổ mã lệnh để dễ dàng xem lại về sau này. Để bật tắt khả năng này, chọn Bookmarks từ menu Edit, hoặc chọn từ thanh cơng cụ Edit. o Các phím tắt trong cửa sổ mã lệnh: Chức năng Phím tắt Xem cửa sổ Code F7 Xem cửa sổ Object Browser F2 Tìm kiếm CTRL+F Thay thế CTRL+H Tìm tiếp SHIFT+F4 Tìm ngược SHIFT+F3 Chuyển đến thủ tục kế tiếp CTRL+DOWN ARROW Chuyển đến thủ tục trước đĩ CTRL+UP ARROW Xem định nghĩa SHIFT+F2 Cuộn xuống một màn hình CTRL+PAGE DOWN Cuộn lên một màn hình CTRL+PAGE UP Nhảy về vị trí trước đĩ CTRL+SHIFT+F2 Trở về đầu của mơ-đun CTRL+HOME Đến cuối mơ-đun CTRL+END I.2. Các chức năng tự động: o Tự động kiểm tra cú pháp (Auto Syntax Check) Nếu chức năng này khơng được bật thì khi ta viết một dịng mã cĩ chứa lỗi, VB chỉ hiển thị dịng chương trình sai với màu đỏ nhưng khơng kèm theo chú thích gì và tất nhiên ta cĩ thể viết tiếp các dịng lệnh khác. Cịn khi chức năng này được bật, VB sẽ cho ta biết một số thơng tin về lỗi và hiển thị con trỏ ngay dịng chương trình lỗi để chờ ta sửa. o Yêu cầu khai báo biến (Require Variable Declaration) VB sẽ thơng báo lỗi khi một biến được dùng mà khơng khai báo và sẽ chỉ ra vị trí của biến đĩ. Trang 18
  19. Visual Basic Hình III.1: Cửa sổ Options o Gợi nhớ mã lệnh (Code): Khả năng Auto List Members: Tự động hiển thị danh sách các thuộc tính và phương thức của 1 điều khiển hay một đối tượng khi ta gõ vào tên của chúng. Chọn thuộc tính hay phương thức cần thao tác và nhấn phím Tab hoặc Space để đưa nĩ vào chương trình. Hình III.2 Cửa sổ Code với khả năng gợi nhớ Code II. Kiểu dữ liệu II.1. Khái niệm Kiểu dữ liệu là một tập hợp các giá trị mà một biến của kiểu cĩ thể nhận và một tập hợp các phép tốn cĩ thể áp dụng trên các giá trị đĩ. Trang 19
  20. Visual Basic II.2. Các kiểu dữ liệu cơ sở trong Visual Basic Kiểu dữ liệu Mơ tả Boolean Gồm 2 giá trị: TRUE & FALSE. Byte Các giá trị số nguyên từ 0 – 255 Integer Các giá trị số nguyên từ -32768 – 32767 Long Các giá trị số nguyên từ -2147483648 – 2147483647. Kiểu dữ liệu này thường được gọi là số nguyên dài. Single Các giá trị số thực từ -3.402823E+38 – 3.402823E+38. Kiểu dữ liệu này cịn được gọi là độ chính xác đơn. Double Các giá trị số thực từ -1.79769313486232E+308 - 1.79769313486232E+308. Kiểu dữ liệu này được gọi là độ chính xác kép. Currency Dữ liệu tiền tệ chứa các giá trị số từ -922.337.203.685.477,5808 - 922.337.203.685.477,5807. String Chuỗi dữ liệu từ 0 đến 65.500 ký tự hay ký số, thậm chí là các giá trị đặc biệt như ^%@. Giá trị kiểu chuỗi được đặt giữa 2 dấu ngoặc kép (“”). Date Dữ liệu kiểu ngày tháng, giá trị được đặt giữa cặp dấu ##. Việc định dạng hiển thị tùy thuộc vào việc thiết lập trong Control Panel. Variant Chứa mọi giá trị của các kiểu dữ liệu khác, kể cả mảng. III. Hằng số III.1. Khái niệm Hằng số (Constant) là giá trị dữ liệu khơng thay đổi. III.2. Khai báo hằng [Public|Private] Const [As ] = Trong đĩ, tên hằng được đặt giống theo quy tắc đặt tên của điều khiển. Ví dụ: Const g = 9.8 Const Num As Integer = 4*5 Ta cĩ thể dùng cửa sổ Object Browser để xem danh sách các hằng cĩ sẵn của VB và VBA (Visual Basic for Application). Trường hợp trùng tên hằng trong những thư viện khác nhau, ta cĩ thể chỉ rõ tham chiếu hằng. Trang 20
  21. Visual Basic [ .][ .] III) Biến III.1. Khái niệm Biến (Variable) là vùng lưu trữ được đặt tên để chứa dữ liệu tạm thời trong quá trình tính tốn, so sánh và các cơng việc khác. Biến cĩ 2 đăc điểm: o Mỗi biến cĩ một tên. o Mỗi biến cĩ thể chứa duy nhất một loại dữ liệu. III.2. Khai báo [Public|Private|Static|Dim] [ As ] Trong đĩ, tên biến: là một tên được đặt giống quy tắc đặt tên điều khiển. Nếu cần khai báo nhiều biến trên một dịng thì mỗi khai báo cách nhau dấu phẩy (,). Nếu khai báo biến khơng xác định kiểu dữ liệu thì biến đĩ cĩ kiểu Variant. Khai báo ngầm: Đây là hình thức khơng cần phải khai báo một biến trước khi sử dụng. Cách dùng này cĩ vẻ thuận tiện nhưng sẽ gây một số sai sĩt, chẳng hạn khi ta đánh nhầm tên biến, VB sẽ hiểu đĩ là một biến mới dẫn đến kết quả chương trình sai mà rất khĩ phát hiện. Ví dụ: Dim Num As Long, a As Single Dim Age As Integer Khai báo tường minh: Để tránh rắc rối như đã nêu ở trên, ta nên quy định rằng VB sẽ báo lỗi khi gặp biến chưa được khai báo bằng dịng lệnh: Option Explicit trong phần Declaration (khai báo) của mơ-đun. Option Explicit chỉ cĩ tác dụng trên từng mơ-đun do đĩ ta phải đặt dịng lệnh này trong từng mơ-đun của biểu mẫu, mơ-đun lớp hay mơ-đun chuẩn. IV. Biểu thức IV.1. Khái niệm Tốn tử hay phép tốn (Operator): là từ hay ký hiệu nhằm thực hiện phép tính và xử lý dữ liệu. Tốn hạng: là giá trị dữ liệu (biến, hằng ). Biểu thức: là tập hợp các tốn hạng và các tốn tử kết hợp lại với nhau theo quy tắc nhất định để tính tốn ra một giá trị nào đĩ. IV.2. Các loại phép tốn a. Các phép tốn số học: Thao tác trên các giá trị cĩ kiểu dữ liệu số. Trang 21
  22. Visual Basic Phép Ý nghĩa Kiểu của đối số Kiểu của kết quả tốn - Phép lấy số đối Kiểu số (Integer, Single ) Như kiểu đối số + Phép cộng hai số Kiểu số (Integer, Single ) Như kiểu đối số - Phép trừ hai số Kiểu số (Integer, Single ) Như kiểu đối số * Phép nhân hai số Kiểu số (Integer, Single ) Như kiểu đối số / Phép chia hai số Kiểu số (Integer, Single ) Single hay Double \ Phép chia lấy phần nguyên Integer, Long Integer, Long Mod Phép chia lấy phần dư Integer, Long Integer, Long ^ Tính lũy thừa Kiểu số (Integer, Single ) Như kiểu đối số b. Các phép tốn quan hệ Đây là các phép tốn mà giá trị trả về của chúng là một giá trị kiểu Boolean (TRUE hay FALSE). Phép tốn Ý nghĩa = So sánh bằng nhau So sánh lớn hơn = So sánh lớn hơn hoặc bằng = Ví dụ: Giả sử ta cĩ khai báo sau: Dim TodayTemp As Single, MinAge As Integer Dim Sales As Single, NewSales As Single, FullName As String Các lệnh sau gán giá trị cho các biến trên: Trang 22
  23. Visual Basic TodayTemp = 30.5 MinAge = 18 Sales = 200000 NewSales = Sales * 1.2 Giả sử người dùng cần nhập họ và tên vào ơ nhập liệu TextBox cĩ thuộc tính Name là txtName, câu lệnh dưới đây sẽ lưu giá trị của ơ nhập liệu vào trong biến FullName: FullName = txtName.Text Lưu ý: Kiểu dữ liệu của biểu thức (vế phải của lệnh gán) phải phù hợp với biến ta cần gán trị. V.2. Lệnh rẽ nhánh If o Một dịng lệnh: If Then o Nhiều dịng lệnh: If Then Các dịng lệnh End If Sai Lưu đồ cú pháp: ĐK Đúng Các dịng lệnh Trong đĩ, : biểu thức mà kết quả trả về kiểu Boolean. Ý nghĩa câu lệnh: Các dịng lệnh hay dịng lệnh sẽ được thi hành nếu như điều kiện là đúng. Cịn nếu như điều kiện là sai thì câu lệnh tiếp theo sau cấu trúc If Then được thi hành. o Dạng đầy đủ: If Then Else If Then [Khối lệnh 1] ElseIf Then [Khối lệnh 2] [Else [Khối lệnh n]] End If Trang 23
  24. Visual Basic VB sẽ kiểm tra các điều kiện, nếu điều kiện nào đúng thì khối lệnh tương ứng sẽ được thi hành. Ngược lại nếu khơng cĩ điều kiện nào đúng thì khối lệnh sau từ khĩa Else sẽ được thi hành. Ví dụ: If (TheColorYouLike = vbRed) Then MsgBox "You are a lucky person" ElseIf (TheColorYouLike = vbGreen) Then MsgBox "You are a hopeful person" ElseIf (TheColorYouLike = vbBlue) Then MsgBox "You are a brave person" ElseIf (TheColorYouLike = vbMagenta) Then MsgBox "You are a sad person" Else MsgBox "You are an average person" End If V.3. Lệnh lựa chọn Select Case Trong trường hợp cĩ quá nhiều các điều kiện cần phải kiểm tra, nếu ta dùng cấu trúc rẽ nhánh If Then thì đoạn lệnh khơng được trong sáng, khĩ kiểm tra, sửa đổi khi cĩ sai sĩt. Ngược lại với cấu trúc Select Case, biểu thức điều kiện sẽ được tính tốn một lần vào đầu cấu trúc, sau đĩ VB sẽ so sánh kết quả với từng trường hợp (Case). Nếu bằng nĩ thi hành khối lệnh trong trường hợp (Case) đĩ. Select Case Case [Khối lệnh 1] Case [Khối lệnh 2] . . . [Case Else [Khối lệnh n]] End Select Mỗi danh sách kết quả biểu thức sẽ chứa một hoặc nhiều giá trị. Trong trường hợp cĩ nhiều giá trị thì mỗi giá trị cách nhau bởi dấu phẩy (,). Nếu cĩ nhiều Case cùng thỏa điều kiện thì khối lệnh của Case đầu tiên sẽ được thực hiện. Ví dụ của lệnh rẽ nhánh If Then ở trên cĩ thể viết như sau: Select Case TheColorYouLike Case vbRed MsgBox "You are a lucky person" Case vbGreen MsgBox "You are a hopeful person" Case vbBlue MsgBox "You are a brave person" Case vbMagenta MsgBox "You are a sad person" Case Else Trang 24
  25. Visual Basic MsgBox "You are an average person" End Select Tốn tử Is & To Tốn tử Is: Được dùng để so sánh với một biểu thức nào đĩ. Tốn tử To: Dùng để xác lập miền giá trị của . Ví dụ: Select Case Tuoi Case Is Đkiện Loop Đúng Sai Khối lệnh Khối lệnh sẽ được thi hành đến khi nào điều kiện khơng cịn đúng nữa. Do biểu thức điều kiện được kiểm tra trước khi thi hành khối lệnh, do đĩ cĩ thể khối lệnh sẽ khơng được thực hiện một lần nào cả. Kiểu 2: Do Loop While Trang 25
  26. Visual Basic Khối lệnh sẽ được thực hiện, sau đĩ biểu thức điều kiện được kiểm tra, nếu điều kiện cịn đúng thì, khối lệnh sẽ được thực hiện tiếp tục. Do biểu thức điều kiện được kiểm tra sau, do đĩ khối lệnh sẽ được thực hiện ít nhất một lần. Kiểu 3: Do Until Loop Cũng tương tự như cấu trúc Do While Loop nhưng khác biệt ở chỗ là khối lệnh sẽ được thi hành khi điều kiện cịn sai. Kiểu 4: Do Loop Until Khối lệnh được thi hành trong khi điều kiện cịn sai và cĩ ít nhất là một lần lặp. Ví dụ: Đoạn lệnh dưới đây cho phép kiểm tra một số nguyên N cĩ phải là số nguyên tố hay khơng? Dim i As Integer i = 2 Do While (i Sqr(N)) And (N = To [Step ] [khối lệnh] Next Biến đếm, điểm đầu, điểm cuối, bước nhảy là những giá trị số (Integer, Single, ). Bước nhảy cĩ thể là âm hoặc dương. Nếu bước nhảy là số âm thì điểm đầu phải lớn hơn điểm cuối, nếu khơng khối lệnh sẽ khơng được thi hành. Khi Step khơng được chỉ ra, VB sẽ dùng bước nhảy mặc định là một. Ví dụ: Đoạn lệnh sau đây sẽ hiển thị các kiểu chữ hiện cĩ của máy bạn. Private Sub Form_Click( ) Dim i As Integer Trang 26
  27. Visual Basic For i = 0 To Screen.FontCount MsgBox Screen.Fonts(I) Next End Sub Ví dụ: Tính N! o Bước 1: Thiết kế chương trình cĩ giao diện: TextBox: Name:txtNum Label: Name: lblKQ o Bước 2: Sự kiện Command1_Click được xử lý: Private Sub Command1_Click() Dim i As Integer, n As Integer, Kq As Long n = Val(txtNum.Text) Kq = 1 For i = 1 To n Kq = Kq * i Next lblKQ.Caption = Str(Kq) End Sub o Lưu dự án và chạy chương trình ta được kết quả như hình dưới: 9 For Each Next Tương tự vịng lặp For Next, nhưng nĩ lặp khối lệnh theo số phần tử của một tập các đối tượng hay một mảng thay vì theo số lần lặp xác định. Vịng lặp này tiện lợi khi ta khơng biết chính xác bao nhiêu phần tử trong tập hợp. For Each In Next Lưu ý: - Phần tử trong tập hợp chỉ cĩ thể là biến Variant, biến Object, hoặc một đối tượng trong Object Browser. - Phần tử trong mảng chỉ cĩ thể là biến Variant. Trang 27
  28. Visual Basic - Khơng dùng For Each Next với mảng chứa kiểu tự định nghĩa vì Variant khơng chứa kiểu tự định nghĩa. VI. Chương trình con VI.1. Khái niệm Trong những chương trình lớn, cĩ thể cĩ những đoạn chương trình viết lặp đi lặp lại nhiều lần, để tránh rườm rà và mất thời gian khi viết chương trình người ta thường phân chia chương trình thành nhiều module, mỗi module giải quyết một cơng việc nào đĩ. Các module như vậy gọi là các chương trình con. Một tiện lợi khác của việc sử dụng chương trình con là ta cĩ thể dễ dàng kiểm tra xác định tính đúng đắn của nĩ trước khi ráp nối vào chương trình chính và do đĩ việc xác định sai sĩt để tiến hành hiệu đính trong chương trình chính sẽ thuận lợi hơn. Trong Visual Basic, chương trình con cĩ hai dạng là hàm (Function) và thủ tục (Sub). Hàm khác thủ tục ở chỗ hàm trả về cho lệnh gọi một giá trị thơng qua tên của nĩ cịn thủ tục thì khơng. Do vậy ta chỉ dùng hàm khi và chỉ khi thoả mãn đồng thời các yêu cầu sau đây: o Ta muốn nhận lại một kết quả (chỉ một mà thơi) khi gọi chương trình con. o Ta cần dùng tên chương trình con (cĩ chứa kết quả) để viết trong các biểu thức. Nếu khơng thỏa mãn hai điều kiện ấy thì dùng thủ tục. VI.2. Thủ tục a. Khái niệm: Thủ tục là một chương trình con thực hiện một hay một số tác vụ nào đĩ. Thủ tục cĩ thể cĩ hay khơng cĩ tham số. b. Khai báo thủ tục [Private | Public] [Static] Sub [( [As ])] hay End Sub Trong đĩ: - : Đây là một tên được đặt giống quy tắc tên biến, hằng, - [: ]: cĩ thể cĩ hay khơng? Nếu cĩ nhiều tham số thì mỗi tham số phân cách nhau dấu phẩy. Nếu khơng xác định kiểu tham số thì tham số cĩ kiểu Variant. Để gọi thủ tục để thực thi, ta cĩ 2 cách: o [ ] o Call ([ ]) Trang 28
  29. Visual Basic Ví dụ: Thiết kế chương trình kiểm tra xem số nguyên N cĩ phải là số nguyên tố hay khơng? o Bước 1: Thiết kế chương trình cĩ giao diện TextBox: Name:txtNum o Bước 2: Viết thủ tục KtraNgTo trong phần mã lệnh của Form Sub KTraNgTo(N As Integer) Dim i As Integer i = 2 Do While (i 0) i = i + 1 Loop If (i > Sqr(N)) And (N <> 1) Then MsgBox Str(N) & " la so nguyen to" Else MsgBox Str(N) & " khong la so nguyen to" End If End Sub o Bước 3: Xử lý sự kiện Command1_Click; trong thủ tục xử lý sự kiện này ta cĩ gọi thủ tục KtraNgTo như sau: Private Sub Command1_Click() KTraNgTo Val(txtNum.Text) ‘ Call KtraNgTo(Val(txtNum.Text)) End Sub o Bước 4: Lưu dự án và chạy chương trình. Ta được kết quả sau: Trong ví dụ trên thay vì gọi thủ tục bằng lời gọi: KTraNgTo Val(txtNum.Text) Ta cĩ thể sử dụng cách khác: Call KtraNgTo(Val(txtNum.Text)) Trang 29
  30. Visual Basic VI.3. Hàm a. Khái niệm Hàm (Function) là một chương trình con cĩ nhiệm vụ tính tốn và cho ta một kết quả. Kết quả này được trả về trong tên hàm cho lời gọi nĩ. b. Khai báo hàm [Private | Public | Static] Function [( [As ])] _ [As ] hay End Function Trong đĩ: - : Đây là một tên được đặt giống quy tắc tên biến, hằng, - [: ]: cĩ thể cĩ hay khơng? Nếu cĩ nhiều tham số thì mỗi tham số phân cách nhau dấu phẩy. Nếu khơng xác định kiểu tham số thì tham số cĩ kiểu Variant. - : Kết quả trả về của hàm, trong trường hợp khơng khai báo As , mặc định, VB hiểu kiểu trả về kiểu Variant. Khi gọi hàm để thực thi ta nhận được một kết quả. Cần chú ý khi gọi hàm thực thi ta nhận được một kết quả cĩ kiểu chính là kiểu trả về của hàm (hay là kiểu Variant nếu ta khơng chỉ rõ kiểu trả về trong định nghĩa hàm). Do đĩ lời gọi hàm phải là thành phần của một biểu thức. Cú pháp gọi hàm thực thi: [(tham số)]. Ví dụ: Tính N! o Bước 1: Thiết kế chương trình cĩ giao diện: TextBox: Name:txtNum Label: Name: lblKQ o Bước 2: Thêm một hàm vào cửa sổ mã lệnh của Form Function Giaithua(N As Integer) As Long Dim i As Integer, Kq As Long Kq = 1 For i = 1 To n Kq = Kq * i Next Giaithua = Kq End Function Private Sub Command1_Click() Trang 30
  31. Visual Basic Dim n As Integer n = Val(txtNum.Text) lblKQ.Caption = Str(Giaithua(n)) End Sub Lưu dự án và chạy chương trình ta được kết quả như hình dưới: Lưu ý: Do khi gọi hàm ta nhận được một kết quả nên bên trong phần định nghĩa hàm, trước khi kết thúc ta phải gán kết quả trả về của hàm thơng qua tên hàm (trong ví dụ trên là dịng lệnh Giaithua = Kq) VII. Truy xuất dữ liệu trong Visual Basic VII.1. Các khái niệm o Module: - Một ứng dụng đơn giản cĩ thể chỉ cĩ một biểu mẫu, lúc đĩ tất cả mã lệnh của ứng dụng đĩ được đặt trong cửa sổ mã lệnh của biểu mẫu đĩ (gọi là Form Module). Khi ứng dụng được phát triển lớn lên, chúng ta cĩ thể cĩ thêm một số biểu mẫu nữa và lúc này khả năng lặp đi lặp lại nhiều lần của một đoạn mã lệnh trong nhiều biểu mẫu khác nhau là rất lớn. - Để tránh việc lặp đi lặp lại trên, ta tạo ra một Module riêng rẽ chứa các chương trình con được dùng chung. Visual Basic cho phép 3 loại Module: Module biểu mẫu (Form module): đi kèm với mỗi một biểu mẫu là một module của biểu mẫu đĩ để chứa mã lệnh của biểu mẫu này. Với mỗi điều khiển trên biểu mẫu, module biểu mẫu chứa các chương trình con và chúng sẵn sàng được thực thi để đáp ứng lại các sự kiện mà người sử dụng ứng dụng tác động trên điều khiển. Module biểu mẫu được lưu trong máy tính dưới dạng các tập tin cĩ đuơi là *.frm. Module chuẩn (Standard module): Mã lệnh khơng thuộc về bất cứ một biểu mẫu hay một điều khiển nào sẽ được đặt trong một module đặc biệt gọi là module chuẩn (được lưu với đuơi *.bas). Các chương trình con được lặp đi lặp lại để đáp ứng các sự kiện khác nhau của các điều khiển khác nhau thường được đặt trong module chuẩn. Module lớp (Class module): được sử dụng để tạo các điều khiển được gọi thực thi trong một ứng dụng cụ thể. Một module chuẩn chỉ chứa mã lệnh nhưng module lớp chứa cả mã lệnh và dữ liệu, chúng cĩ thể được coi là các điều khiển do người lập trình tạo ra (được lưu với đuơi *.cls). Trang 31
  32. Visual Basic o Phạm vi (scope): xác định số lượng chương trình cĩ thể truy xuất một biến. Một biến sẽ thuộc một trong 3 loại phạm vi: Phạm vi biến cục bộ. Phạm vi biến module. Phạm vi biến tồn cục. VII.2. Biến tồn cục o Khái niệm: Biến tồn cục là biến cĩ phạm vi hoạt động trong tồn bộ ứng dụng. o Khai báo: Global [As ] VII.3. Biến cục bộ o Khái niệm: Biến cục bộ là biến chỉ cĩ hiệu lực trong những chương trình mà chúng được định nghĩa. o Khai báo: Dim [As ] o Lưu ý: Biến cục bộ được định nghĩa bằng từ khĩa Dim sẽ kết thúc ngay khi việc thi hành thủ tục kết thúc. VII.4. Biến Module o Khái niệm: Biến Module là biến được định nghĩa trong phần khai báo (General|Declaration) của Module và mặc nhiên phạm vi hoạt động của nĩ là tồn bộ Module ấy. o Khai báo: - Biến Module được khai báo bằng từ khĩa Dim hay Private & đặt trong phần khai báo của Module. Ví dụ: Private Num As Integer - Tuy nhiên, các biến Module này cĩ thể được sử dụng bởi các chương trình con trong các Module khác. Muốn thế chúng phải được khai báo là Public trong phân Khai báo (General|Declaration) của Module. Ví dụ: Public Num As Integer Lưu ý: Khơng thể khai báo biến với từ khĩa là Public trong chương trình con. VII.5. Truyền tham số cho chương trình con o Khái niệm Một chương trình con đơi lúc cần thêm một vài thơng tin về trạng thái của đoạn mã lệnh mà nĩ định nghĩa để thực thi. Những thơng tin này là các biến được truyền vào khi gọi chương trình con, các biến này gọi là tham số của chương trình con. Trang 32
  33. Visual Basic Cĩ hai cách để truyền tham số cho chương trình con: Truyền bằng giá trị & truyền bằng địa chỉ. o Truyền tham số bằng giá trị Với cách truyền tham số theo cách này, mỗi khi một tham số được truyền vào, một bản sao của biến đĩ được tạo ra. Nếu chương trình con cĩ thay đổi giá trị, những thay đổi này chỉ tác động lên bản sao của biến. Trong VB, từ khĩa ByVal được dùng để xác định tham số được truyền bằng giá trị. Ví dụ: Sub Twice (ByVal Num As Integer) Num = Num * 2 Print Num End Sub Private Sub Form_Click() Dim A As Integer A = 4 Print A Twice A Print A End Sub Kết quả thực hiện của đoạn chương trình trên: 4 8 4 o Truyền tham số bằng địa chỉ Truyền tham số theo địa chỉ cho phép chương trình con truy cập vào giá trị gốc của biến trong bộ nhớ. Vì thế, giá trị của biến cĩ thể sẽ bị thay đổi bởi đoạn mã lệnh trong chương trình con. Mặc nhiên, trong VB6 các tham số được truyền theo địa chỉ; tuy nhiên ta cĩ thể chỉ định một cách tường minh nhờ vào từ khĩa ByRef. Ví dụ: Sub Twice (Num As Integer) Num = Num * 2 Print Num End Sub Private Sub Form_Click() Dim A As Integer A = 4 Print A Twice A Print A End Sub Kết quả thực hiện của đoạn chương trình trên: 4 8 Trang 33
  34. Visual Basic 8 VIII. Bẫy lỗi trong Visual Basic Các thao tác bẫy các lỗi thực thi của chương trình là cần thiết đối với các ngơn ngữ lập trình. Người lập trình khĩ kiểm sốt hết các tình huống cĩ thể gây ra lỗi. Chẳng hạn người ta khĩ cĩ thể kiểm tra chặt chẽ việc người dùng đang chép dữ liệu từ đĩa mềm (hay CD) khi chúng khơng cĩ trong ổ đĩa. Nếu cĩ các thao tác bẫy lỗi ở đây thì tiện cho người lập trình rất nhiều. Visual Basic cũng cung cấp cho ta một số cấu trúc để bẫy các lỗi đang thực thi. Cú pháp: Dạng 1: On Error GoTo : Ý nghĩa: - : là một tên được đặt theo quy tắc của một danh biểu. - Nếu một lệnh trong thì khi chương trình thực thi đến câu lệnh đĩ, chương trình sẽ tự động nhảy đến đoạn chương trình định nghĩa bên dưới để thực thi. Dạng 2: On Error Resume Next Ý nghĩa: - Nếu một lệnh trong thì khi chương trình thực thi đến câu lệnh đĩ, chương trình sẽ tự động bỏ qua câu lệnh bị lỗi và thực thi câu lệnh kế tiếp. Trang 34
  35. Visual Basic CHƯƠNG 4 CÁC KIỂU DỮ LIỆU CĨ CẤU TRÚC Mục tiêu: Chương này giới thiệu về các cấu trúc dữ liệu trong VB. Việc nắm bắt được các vấn đề này giúp cho việc tổ chức dữ liệu khi viết chương trình VB được hợp lý hơn. Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau: - Sử dụng kiểu dữ liệu chuỗi. - Sử dụng kiểu ngày tháng. - Kiểu động (Variant) - Kiểu mảng Kiến thức cĩ liên quan: - Các cấu trúc lập trình trong VB. Tài liệu tham khảo: Trang 35
  36. Visual Basic I. Kiểu chuỗi ký tự (String) I.1. Khai báo Cĩ hai đặc tả chuỗi ký tự theo cú pháp như sau: - String * Chỉ ra một chuỗi ký tự cĩ độ dài cố định là bao nhiêu ký tự. Trong trường hợp giá trị thực của chuỗi cĩ độ dài ngắn hơn độ dài khai báo thì độ dài của chuỗi thì một số khoảng trắng được thêm vào cho đủ độ dài thực. Trong trường hợp giá trị thực của chuỗi cĩ độ dài lớn hơn độ dài khai báo thì sẽ cắt bớt các ký tự dư thừa bên phải. Một chuỗi khơng cĩ ký tự nào (độ dài bằng 0) gọi là chuỗi rỗng. - String: Khi khơng chỉ ra chiều dài tối đa của chuỗi thì mặc nhiên chuỗi cĩ chiều dài tối đa là 65.500 ký tự. Ví dụ: Dim Name As String * 30, Class As String * 10 Dim A As String I.2. Các hàm xử lý chuỗi o Ghép chuỗi: cho phép ghép 2 hay nhiều chuỗi lại với nhau nhờ phép tốn &. Ví dụ: Dim FirstWord As String, SecondWord As String Dim Greeting As String FirstWord = "Hello" SecondWord = "World" Greeting = FirstWord & SecondWord ' Greeting bây giờ là "HelloWorld" o Len: trả về chiều dài một chuỗi được chỉ định. Ví dụ: Greeting = "Hi John!" Dim iLen As Integer iLen = Len(Greeting) ' iLen bây giờ bằng 8 o Left: Trích chuỗi con từ phần đầu chuỗi gốc Left (String, [length]). o Right: Trích chuỗi con từ phần đuơi chuỗi gốc Right (String, [length]) o Mid: Trích chuỗi con từ giữa chuỗi gốc Mid(String, Start As Long, [length]) Ví dụ 1: Dim Today As String, StrDay As String, StrMonth As String Dim StrYear As String, StrMonthYear As String Today = "24/05/2001" ' Lấy ra 2 ký tự từ bên trái của chuỗi Today StrDay = Left(Today,2) ' StrDay bây giờ bằng "24" ' Lấy ra 4 ký tự từ bên phải của String Today StrYear = Right(Today,4) ' StrYear bây giờ bằng "2001" ' Lấy ra 2 characters bắt đầu từ ký tự thứ tư của chuỗi ‘ Today, ký tự đầu tiên từ bên trái là thứ nhất StrMonth = Mid(Today,4,2) ' StrMonth bây giờ bằng "05" Trang 36
  37. Visual Basic ' Lấy ra phần cịn lại bắt đầu từ ký tự 4 của chuỗi Today StrMonthYear = Mid(Today,4) ' StrMonthYear bằng “05/2001" Ví dụ 2: Today = "24/05/2001" ' Thay thế character thứ 3 của Today bằng "-" Mid(Today,3,1) = "-" ' Thay thế 2 ký tự bắt đầu từ ký tự 4 của Today bằng "10" Mid(Today,4,2) = "10" ' Thay thế character thứ 6 của Today bằng "-" Mid(Today,6,1) = "-" ' Today bây giờ bằng "24-10-2001" o InStr: Tìm chuỗi con trong chuỗi gốc. Nếu hàm InStr trả về 0, nghĩa là khơng tìm thấy. Cú pháp: InStr([start,] string1, string2 [, compare]) Trong đĩ: - Start: Xác định vị trí trong chuỗi bắt đầu việc tìm kiếm. Nếu giá trị là Null thì sẽ bắt đầu từ đầu chuỗi. Nếu như tham số Compare cĩ đặc tả thì bắt buộc phải khai báo tham số Start. - String1: Biểu thức chuỗi để so sánh. - String2: Chuỗi cần tìm. - Compare: Xác định kiểu so sánh chuỗi. Giá trị: vbTextCompare, vbBinaryCompare. Ví dụ 1: Dim myString As String, Position As Integer myString = "The *rain in Spain mainly " Position = Instr(myString,"*") ' Position sẽ là 5 Nếu trong myString khơng cĩ dấu "*" thì Position sẽ bằng 0 Ví dụ 2: Dim KeyValuePair As String, Key As String Dim Value As String KeyValuePair = "BeatlesSong=Yesterday" Pos = Instr(KeyValuePair, "=") Key = Left(KeyValuePair, Pos-1) Value = Mid(KeyValuePair, Pos+1) o Replace: tìm và thay thế chuỗi. Cú pháp: Replace(Expression, find, replace[, start[, count[, compare]]]) Trong đĩ: - Expression: Biểu thức chuỗi chứa chuỗi cần thay thế. - find:Chuỗi cần tìm. - replace: Chuỗi thay thế chuỗi tìm được. - start: Tương tự như hàm InStr. - count: Xác định số lần thay thế. Mặc định là 1. - compare: Tương tự như hàm InStr. o LTrim (RTrim): cắt tất cả các khoảng trắng bên trái (bên phải của chuỗi) Cú pháp: LTrim(string) RTrim(string) Trang 37
  38. Visual Basic o UCase: đổi chuỗi sang chuỗi gồm các ký tự là chữ hoa. Cú pháp: UCase(string) o Asc: cho mã Ascii của một ký tự. o Chr: trả về ký tự ứng với mã Ascii được chỉ định. Dim ASCIINumberA As Integer, CharB As String * 1 Dim StrFive As String * 1 ASCIINumberA = Asc("A") ' ASCIINumberA bây giờ bằng 65 CharB = Chr(66) StrFive = Chr(Asc("0") + 5) ' ta cĩ digit "5" o InstrRev: tương tự như InStr nhưng việc tìm kiếm được tiến hành từ phải sang. o Val: Hàm đổi chuỗi sang số. o Str: Hàm đổi số sang chuỗi. II. Kiểu ngày tháng (Date) - Là kiểu mà các biến của nĩ chứa giá trị ngày tháng. - Để cho VB biết dữ liệu là kiểu Date ta cần đặt giữa hai dấu # (hoặc cặp “”). Ví dụ: Dim D As Date D = #01/02/98# ‘ Hay “01/02/98” Nếu hiểu theo kiểu người Mỹ, đây là ngày 2 tháng giêng năm 1998, cịn nếu theo kiểu Anh thì đây là ngày 1 tháng hai năm 1998. Tuy nhiên, định dạng ngày tháng hiển thị phụ thuộc vào quy định của Windows. - Hộp thoại hình IV.1 hiển thị khi ta chọn Regional Setting trong cửa sổ Control Panel của Windows, nĩ cho phép quy định kiểu ngày tháng tùy thuộc cách mà người dùng quy định. VB xử lý ngày tháng theo kiểu Mỹ, nhưng nếu máy hiển thị theo kiểu Anh thì nĩ vẫn hiển thị theo kiểu Anh. Hình IV 1 Hộp thoại xác lập - Hàm Now: trả về ngày giờ hiện tại. Ví dụ: Dùng hàm Now & Format: MsgBox "NOW IS " & Format (Now, "ddd dd-mmm-yyyy hh:nn:ss") ' sẽ hiển thị NOW IS Tue 05-Oct-2004 16:15:53 Trang 38
  39. Visual Basic III. Các loại số o Để chuyển đổi một chuỗi ra số ta cĩ các hàm Val, CInt, CSng. Ngược lại để chuyển đổi từ số sang chuỗi ta dùng CStr, Str. Ví dụ: Dollars = "500" ExchangeRatePerDollar = "7000" tempValue= Val(Dollars) * Val(ExchangeRatePerDollar) VNDong = CStr(tempValue) MsgBox "Amount in VN Dong is " & VNDong Ví dụ: Dollars = "500.0" ExchangeRatePerDollar = "7000.0" 'Dùng hàm CSng để đổi chuỗi ra Single tempValue = CSng(Dollars) * CSng(ExchangeRatePerDollar) 'Dùng hàm Format để cĩ các dấu phẩy ở ngàn và triệu ‘ và phải cĩ 2 chữ số sau dấu chấm thập phân. VNDong = Format (tempValue, "#,###,###.00") MsgBox "Amount in VN Dong is " & VNDong o Round: bỏ bớt một số chữ số sau dấu chấm thập phân Ví dụ: Round ( 12.3456789, 4 ) chỉ giữ lại 4 con số sau dấu chấm thập phân và cho ta 12.3457 IV.Kiểu Object Biến kiểu Object chứa một địa chỉ 4 Byte trỏ đến đối tượng trong ứng dụng hiện hành hoặc các ứng dụng khác. Dùng lệnh Set để chỉ ra đối tượng cụ thể. Dim ObjDb As Object Set ObjDb = OpenDatabase("d:\tqdinh\thu.mdb") Khi khai báo biến đối tượng, ta nên chỉ ra tên lớp tường minh, chẳng hạn như TextBox thay vì Control, ứng dụng của ta sẽ chạy nhanh hơn. Ta cĩ thể xem danh sách các lớp cĩ sẵn trong cửa sổ Object Browser. V. Kiểu Variant Biến kiểu Variant cĩ thể chứa mọi kiểu dữ liệu kể cả kiểu mảng, kiểu do người dùng định nghĩa nhưng ngoại trừ kiểu chuỗi cĩ độ dài cố định . Biến kiểu Variant cĩ thể nhận các giá trị đặc biệt như Empty, Nothing, Error, Null. Ta cĩ thể xác định kiểu dữ liệu của biến Variant bằng các sử dụng hàm VarType hoặc hàm TypeName. Hàm VarType dùng để kiểm tra kiểu dữ liệu Hằng Giá trị Diễn giải vbEmpty 0 Khơng chứa gì cả vbNull 1 Dữ liệu khơng hợp lệ vbInteger 2 Dữ liệu kiểu Integer chuẩn Trang 39
  40. Visual Basic vbLong 3 Dữ liệu kiểu Long Integer vbSingle 4 Dữ liệu kiểu dấu chấm động Single vbDouble 5 Dữ liệu kiểu dấu chấm động Double vbCurrency 6 Kiểu Currency vbDate 7 Kiểu Date vbString 8 Kiểu String vbObject 9 Kiểu Object vbError 10 Cĩ một đối tượng lỗi vbBoolean 11 Kiểu giá trị Boolean chuẩn vbVariant 12 Kiểu Variant vbDataObject 13 Kiểu DAO chuẩn (data access object) vbDecimal 14 Giá trị thuộc hệ thập phân vbByte 17 Kiểu Byte vbUserDefinedType 36 Kiểu do người dùng định nghĩa vbArray 8192 Kiểu mảng Một số chú ý khi dùng biến kiểu Variant: - Nếu muốn thi hành các hàm tốn học, Variant phải chứa giá trị kiểu số. - Nếu muốn nối chuỗi, dùng tốn tử & thay vì tốn tử +. Giá trị Empty: - Đây là giá trị đặc biệt xuất hiện khi một biến chưa được gán trị. Ta dùng hàm IsEmpty để kiểm tra giá trị Empty. - Giá trị Empty biến mất khi cĩ một giá trị bất kỳ được gán cho biến Variant, để trở về giá trị Empty, ta gán từ khố Empty cho biến Variant. Giá trị Null: Biến Variant chứa giá trị Null trong trường hợp những ứng dụng cơ sở dữ liệu thể hiện khơng cĩ dữ liệu hoặc dữ liệu khơng xác định. Giá trị Error: Trong một biến kiểu Variant, Error là một giá trị đặc biệt cho biết đã cĩ một lỗi đã xảy ra bên trong thủ tục. Ví dụ: Private Sub cmdShowDataTypes_Click() Dim sMess As String Dim vVariant As Variant vVariant = "Xin chao" 'String sMess = VarType(vVariant) & vbCrLf ' xuống dịng & về đầu dịng vVariant = 25 ' Integer sMess = sMess & VarType(vVariant) & vbCrLf vVariant = True ' Boolean sMess = sMess & VarType(vVariant) & vbCrLf 'Date vVariant = #1/1/2001# 'trong cặp dấu # sMess = sMess & VarType(vVariant) MsgBox sMess End Sub Khi chạy chương trình kết quả là: Trang 40
  41. Visual Basic VI. Kiểu Mảng VI.1. Khái niệm - Mảng là tập hợp các phần tử cĩ cùng một kiểu. - Dùng mảng sẽ làm cho chương trình đơn giản và gọn hơn vì ta cĩ thể sử dụng vịng lặp. Mảng sẽ cĩ biên trên và biên dưới, trong đĩ các thành phần của mảng là liên tiếp trong khoảng giữa hai biên này. - Cĩ hai loại biến mảng: mảng cĩ chiều dài cố định và mảng cĩ chiều dài thay đổi lúc thi hành. VI.2. Khai báo o Mảng cĩ chiều dài cố định: Dim ( ) [As ] Lúc này phần tử đầu tiên cĩ chỉ số là 0 & phần tử cuối cùng cĩ chỉ số là . Dim ( To ) [As ] Ví dụ: ' Khai báo một biến mảng 15 phần tử kiểu Integer Dim Counters(14)As Integer ' Khai báo một biến mảng 21 phần tử kiểu Double Public Sums(20)As Double ' Khai báo một biến mảng 10 phần tử kiểu chuỗi ký tự Dim List (1 To 10) As String * 12 - Hàm UBound trả về biên trên của một mảng. Trang 41
  42. Visual Basic - Hàm LBound trả về biên dưới của một mảng. Ví dụ: UBound(List) sẽ trả về giá trị là 10. LBound(List) sẽ trả về giá trị là 1. 9 Lưu ý: ta cĩ thể khai báo một mảng nhiều chiều như sau Dim Multi3D (3, 1 To 10, 9) As Double Khai báo này tạo ra một mảng 3 chiều với kích thước 4 x 10 x 10. o Mảng động: - Đây là mảng cĩ kích thước thay đổi, đĩ là một trong những ưu điểm của mảng động vì nĩ giúp ta tiết kiệm tài nguyên hệ thống. Ta cĩ thể sử dụng một mảng cĩ kích thước lớn trong một thời gian nào đĩ rồi xố bỏ để trả lại vùng nhớ cho hệ thống. - Khai báo một mảng động bằng cách cho nĩ một danh sách khơng theo chiều nào cả. Cú pháp: Dim () [As ] Ví dụ: Dim DynArray() As Integer Sau đĩ ta cĩ thể cấp phát số phần tử thật sự bằng lệnh ReDim. ReDim (N) ' Trong đĩ N là một biểu thức kiểu Integer. ReDim dùng để xác định hay thay đổi kích thước của một mảng động. Ta cĩ thể dùng ReDim để thay đổi số phần tử, số chiều của một mảng nhiều lần nhưng khơng thể thay đổi kiểu dữ liệu của mảng ngoại trừ kiểu mảng là kiểu Variant. Mỗi lần gọi ReDim tất cả các giá trị chứa trong mảng sẽ bị mất. VB khởi tạo lại giá trị cho chúng (Empty đối với mảng Variant, 0 cho mảng kiểu số, chuỗi rỗng cho mảng chuổi hoặc Nothing cho mảng các đối tượng). Nhưng đơi khi ta muốn tăng kích cỡ của mảng nhưng khơng muốn làm mất dữ liệu, ta dùng ReDim đi kèm với từ khố Preserve. Ta xem ví dụ dưới đây: ReDim Preserve DynArray (UBound(DynArray) +10) Tuy nhiên chỉ cĩ biên trên của chiều cuối cùng trong mảng được thay đổi khi ta dùng Preserve. Nếu ta cố tình thay đổi chiều khác hoặc biên dưới thì VB sẽ báo lỗi. VI.3. Một số thao tác trên mảng o Truy xuất từng phần tử trong mảng: ( ) o Sao chép mảng: Đối với VB6, ta cĩ thể gán một mảng cho một mảng khác, hoặc kết quả trả về của một hàm cĩ thể là một mảng. Ví dụ: Sub ByteCopy (old () As Byte, New () As Byte) New = old End Sub Tuy nhiên, cách này cũng chỉ áp dụng được cho mảng khai báo động mà thơi. Khi gán biến, cĩ một số quy luật mà ta cần lưu ý: Đĩ là quy luật về kiểu dữ liệu và quy luật về kích thước và số chiều của mảng. Trang 42
  43. Visual Basic Lỗi khi gán mảng cĩ thể xảy ra lúc biên dịch hoặc khi thi hành. Ta cĩ thể thêm bẫy lỗi để đảm bảo rằng hai mảng là tương thích trước khi gán. o Mảng là kết quả trả về của hàm. Chẳng hạn như: Public Function ArrayFunction (b As Byte) As Byte() Dim x(2) As Byte x(0) = b x(1) = b + 2 x(2) = b + b ArrayFunction = x End Function Khi gọi hàm trả về mảng, biến giữ giá trị trả về phải là một mảng và cĩ kiểu như kiểu của hàm, nếu khơng nĩ sẽ báo lỗi "khơng tương thích kiểu". VII. Kiểu do người dùng định nghĩa - Kiểu mẩu tin Cú pháp: Type : : : : End Type Ví dụ: Type TEmployee Fullname As String Salary As Single Age As Integer End Type Chúng ta vừa định nghĩa một kiểu dữ liệu mới cĩ tên là TEmployee. Kiểu này cĩ nét tương tự như một lớp. Về mặt chức năng, cả hai là như nhau, nhưng một lớp cĩ thể chứa trong DLL và sẵn sàng cho việc dùng chung với các ứng dụng khác, trong khi đĩ kiểu dữ liệu do người dùng định nghĩa phải được khai báo lại trong từng dự án. Do vậy, kiểu lớp cĩ nhiều mặt tiện lợi hơn. Cách truy xuất từng trường của kiểu mẩu tin: . Ví dụ: Giả sử ta cĩ khai báo biến sau: Dim e As TEmployee Ta cĩ thể gán: e.Fullname = “Nguyen Van An” e.Salary = 300000.00 e.Age = 26 Câu lệnh With: - Được sử dụng để viết gọn hơn khi thao tác với dữ liệu kiểu mẩu tin. - Cú pháp: With Trang 43
  44. Visual Basic [ Truy xuất đến từng trường của mẩu tin theo dạng: . ] End With Ví dụ: Dim e As TEmployee Ta cĩ thể gán: With e .Fullname = “Nguyen Van An” .Salary = 300000.00 .Age = 26 End With Trang 44
  45. Visual Basic CHƯƠNG 5 THIẾT KẾ BIỂU MẪU DÙNG CÁC ĐIỀU KHIỂN Mục tiêu: Chương này giới thiệu về các điều khiển dùng trong việc tạo giao diện cho các ứng dụng chạy trên Windows. Việc nắm bắt được các vấn đề này làm cho cơng việc tạo giao diện cho ứng dụng được nhanh chĩng. Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau: - Sử dụng các điều khiển hộp danh sách, hộp lựa chọn để lưu các danh sách. - Sử dụng các điều khiển hộp đánh dấu, nút lựa chọn để nhận/hiển thị dữ liệu dạng Yes/No. - Sử dụng các điều khiển hộp hình ảnh, điều khiển ảnh để hiển thị ảnh. - Sử dụng điều khiển thanh cuộn để nhận/hiển thị dữ liệu số. - Sử dụng điều khiển thời gian để đáp ứng sự trơi đi của thời gian. - Một số điều khiển khác. Kiến thức cĩ liên quan: - Các cấu trúc lập trình trong VB. - Cách thức xử lý sự kiện. Tài liệu tham khảo: - Microsoft Visual Basic 6.0 và Lập trình Cơ sở dữ liệu - Chưong 3, trang 29 - Nguyễn Thị Ngọc Mai (chủ biên), Nhà xuất bản Giáo dục - 2000. Trang 45
  46. Visual Basic I. Phân loại điều khiển Cĩ 3 nhĩm điều khiển trong Visual Basic: Các điều khiển nội tại (Intrinsic control). Các điều khiển nội tại luơn chứa sẵn trong hộp cơng cụ (nhãn, khung, nút lệnh, khung ảnh ). Ta khơng thể gỡ bỏ các điều khiển nội tại ra khỏi hộp cơng cụ. Các điều khiển ActiveX tồn tại trong các tập tin độc lập cĩ phần mở rộng .OCX: Đĩ là các điều khiển cĩ thể cĩ trong mọi phiên bản của VB hoặc là các điều khiển chỉ hiện diện trong ấn bản Professional và Enterprise. Mặt khác cịn cĩ rất nhiều điều khiển ActiveX do nhà cung cấp thứ ba cung cấp. Các đối tượng chèn được (Insertable Object): Các đối tượng này cĩ thể là Microsoft Equation 3.0 hoặc bảng tính (Worksheet) của Microsoft Excel Một vài đối tượng kiểu này cho phép ta lập trình với các đối tượng sinh ra từ các ứng dụng khác ngay trong ứng dụng VB. II. Sử dụng các điều khiển II.1 Điều khiển danh sách các lựa chọn (List Box) II.1.1. Khái niệm: Điều khiển này hiển thị một danh sách các đề mục mà ở đĩ người dùng cĩ thể chọn lựa một hoặc nhiều đề mục Biểu tượng (Shortcut) trên hộp cơng cụ Điều khiển này hiển thị một danh sách các đề mục mà ở đĩ người dùng cĩ thể chọn lựa một hoặc nhiều đề mục Trang 46
  47. Visual Basic List Box giới thiệu với người dùng một danh sách các lựa chọn. Một cách mặc định, các lựa chọn hiển thị theo chiều dọc trên một cột và bạn cĩ thể thiết lập là hiển thị theo nhiều cột. Nếu số lượng các lựa chọn nhiều và khơng thể hiển thị hết trong danh sách thì một thanh trượt sẽ tự động xuất hiện trên điều khiển. Dưới đây là một ví dụ về danh sách các lựa chọn đơn cột. Hình V.1: Ví dụ về List Box II.1.2. Thuộc tính: o Name: Đây là tên của danh sách lựa chọn, được sử dụng như một định danh. o MultiSelect: Thuộc tính này cho phép List Box cĩ được phép cĩ nhiều lựa chọn khi thực thi hay khơng? o Sort: List Box cĩ sắp xếp hay khơng? o Ngồi ra cịn cĩ một số thuộc tính thơng dụng khác như: Font, Width, Height o ListIndex: Vị trí của phần tử được lựa chọn trong List Box. o Select( ): cho biết phần tử thứ trong List Box cĩ được chọn hay khơng? II.1.3. Phương thức: o AddItem: Thêm một phần tử vào List Box. Cú pháp: .AddIem(Item As String, [Index]) Tham số Diễn giải Name Tên của List Box. Item Biểu thức chuỗi (đề mục) cần thêm vào. Index Xác định vị trí đề mục mới được chèn vào, giá trị 0 xác định cho vị trí đầu tiên. Khi khơng chỉ định rõ Index thì phần tử thêm vào là mục cuối cùng trong List Box mới. Sau đây là đoạn mã ví dụ tạo một List Box cĩ tên List1 với các đề mục "Germany," "India," "France," và "USA" vào lúc biểu mẫu được nạp (Load). Private Sub Form_Load () Trang 47
  48. Visual Basic List1.AddItem "Germany" List1.AddItem "India" List1.AddItem "France" List1.AddItem "USA" End Sub Người dùng cũng cĩ thể thêm vào một đề mục mới một cách tự động vào bất kỳ thời điểm nào nhằm đáp lại tác động từ phía người sử dụng ứng dụng. Dưới đây là hình ảnh minh họa cho List Box tương ứng với đoạn mã ở trên. Hình V.2 List box hiển thị các quốc gia Thêm một đề mục mới tại vị trí xác định: để thực hiện cơng việc này ta chỉ cần chỉ ra vị trí cần xen đề mục mới vào. Ví dụ: List1.AddItem "Japan", 0 Thêm mới đề mục tại thời điểm thiết kế: Sử dụng thuộc tính List của điều khiển List Box, ta cĩ thể thêm mới các đề mục và dùng tổ hợp phím CTRL+ENTER để bắt đầu thêm vào đề mục mới trên dịng khác. Khi đã thêm xong danh sách các đề mục, ta cĩ thể sắp xếp lại các đề mục bằng cách sử dụng thuộc tính Sorted và đặt giá trị của thuộc tính này là TRUE. o RemoveItem: Xĩa một phần tử ra khỏi List Box. Cú pháp: .RemoveItem Index Tham số Name và Index giống như ở trường hợp thêm vào một đề mục. o Clear: Xĩa tất cả các mục trong List Box. Cú pháp .Clear o Text: Nhận giá trị từ List Box khi một đề mục được chọn. Chẳng hạn đoạn mã sau đây sẽ cho biết dân số của Canada khi người dùng chọn Canada từ List Box. Private Sub List1_Click () If List1.Text = "Canada" Then Text1.Text = "Canada has 24 million people." End If End Sub Trang 48
  49. Visual Basic Choün Hình V.3 Ví dụ về List Box o List: truy xuất nội dung phần tử bất kỳ trong List Box. Thuộc tính này cho phép truy xuất tất cả các đề mục của điều khiển List Box. Thuộc tính này chứa một mảng và mỗi đề mục là một phần tử của mảng. Mỗi đề mục được hiển thị dưới dạng chuỗi, để tham chiếu đến một đề mục trong danh sách, sử dụng cú pháp sau: .List(Index) Ví dụ: Text1.Text = List1.List(2) II.1.4. Sự kiện: o Click & Double Click: Xảy ra khi người sử dụng nhấp chuột (hay nhấp đúp) vào List Box. Thơng thường người sử dụng sẽ thiết kế một nút lệnh đi kèm để nhận về giá trị do người dùng chọn. Khi đĩ cơng việc thực hiện sau khi nút lệnh được chọn sẽ phụ thuộc vào giá trị người dùng chọn từ List Box. Double Click lên một đề mục trong danh sách cũng cĩ kết quả tương tự như việc chọn một đề mục trong danh sách rồi ấn lên nút lệnh. Để thực hiện cơng việc như trên trong sự kiện Double Click của List Box ta sẽ gọi đến sự kiện Click của nút lệnh. Private Sub List1_DblClick () Command1_Click End Sub Hoặc ta cĩ thể thiết đặt giá trị True cho thuộc tính Value của nút lệnh. Private Sub List1_DblClick () Command1.Value = True End Sub Trang 49
  50. Visual Basic II.2 Điều khiển hộp lựa chọn (Combo Box) Điều khiển Combo Box cĩ thể được xem là tích hợp giữa hai điều khiển Text Box và List Box. Người dùng cĩ thể chọn một đề mục bằng cách đánh chuỗi văn bản vào Combo Box hoặc chọn một đề mục trong danh sách. Điểm khác nhau cơ bản giữa Combo Box và List Box là điều khiển Combo chỉ gợi ý (hay đề nghị) các lựa chọn trong khi đĩ điều khiển List thì giới hạn các đề mục nhập vào tức là người dùng chỉ cĩ thể chọn những đề mục cĩ trong danh sách. Điều khiển Combo chứa cả ơ nhập liệu nên người dùng cĩ thể đưa vào một đề mục khơng cĩ sẵn trong danh sách. Biểu tượng short cut trên hộp cơng cụ: Các dạng của điều khiển Combo Box: Cĩ tất cả 3 dạng của điều khiển Combo Box. Ta cĩ thể chọn dạng của Combo tại thời điểm thiết kế bằng cách dùng giá trị hoặc hằng chuỗi của VB. Kiểu Giá trị Hằng Drop-down Combo Box 0 VbComboDropDown Simple Combo Box 1 VbComboSimple Drop-down List Box 2 vbComboDropDownList Drop-down combo box Simple combo box Drop-down list box Hình V.4: Các dạng combo box - Drop-down Combo Box: Đây là dạng mặc nhiên của Combo. Người dùng cĩ thể nhập vào trực tiếp hoặc chọn từ danh sách các đề mục. - Simple Combo Box: Ta cĩ thể hiển thị nhiều đề mục cùng một lúc. Để hiển thị tất cả các đề mục, bạn cần thiết kế Combo đủ lớn. Một thanh trượt sẽ xuất hiện khi cịn đề mục chưa được hiển thị hết. Ở dạng này, người dùng vẫn cĩ thể nhập một chuỗi vào trực tiếp hoặc chọn từ danh sách các đề mục. - Drop down List Box: Dạng này rất giống như một List box. Một điểm khác biệt đĩ là các đề mục sẽ khơng hiển thị đến khi nào người dùng Click lên mũi tên phía phải của điều khiển. Điểm khác biệt với dạng thứ 2 đĩ là người dùng khơng thể nhập vào trực tiếp một chuỗi khơng cĩ trong danh sách. Các thuộc tính cũng như các phương thức áp dụng trên Combo Box giống như trên List Box. Trang 50
  51. Visual Basic II.3 Điều khiển hộp đánh dấu (Check Box) II.3.1. Khái niệm: Đây là điều khiển hiển thị dấu 9 nếu như được chọn và dấu 9 bị xố nếu như khơng chọn. Dùng điều khiển Check Box để nhận thơng tin từ người dùng theo dạng Yes/No hoặc True/False. Ta cũng cĩ thể dùng nhiều điều khiển trong một nhĩm để hiển thị nhiều khả năng lựa chọn trong khi chỉ cĩ một được chọn. Khi Check Box được chọn, nĩ cĩ giá trị 1 và ngược lại cĩ giá trị 0. Biểu tượng shortcut trên hộp cơng cụ II.3.2. Thuộc tính: o Name: thuộc tính tên. o Value: Giá trị hiện thời trên Check Box. Cĩ thể nhận các giá trị: vbChecked, vbUnchecked, vbGrayed. II.3.3. Sự kiện: o Click: Xảy ra khi người sử dụng nhấp chuột trên Check Box. II.3.4. Ví dụ: Thiết kế chương trình cĩ giao diện: Hình V.5 Ví dụ về Check Box Hình V.5 là hình minh họa cách dùng Check Box để hiển thị chuỗi dưới dạng tơ đậm và nghiêng. Private Sub chkBold_Click () If ChkBold.Value = vbChecked Then ' If checked. txtDisplay.Font.Bold = True Else ' If not checked. txtDisplay.Font.Bold = False End If End Sub Private Sub chkItalic_Click () If ChkItalic.Value = vbChecked Then ' If checked. txtDisplay.Font.Italic = True Else If not checked. Trang 51
  52. Visual Basic txtDisplay.Font.Italic = False End If End Sub II.4 Điều khiển nút lựa chọn (Option Button) II.4.1. Khái niệm: Cơng dụng của điều khiển Option button cũng tương tự như điều khiển Check Box. Điểm khác nhau chủ yếu giữa hai loại điều khiển này đĩ là: Các Option Button của cùng một nhĩm tại mỗi thời điểm chỉ cĩ một điều khiển nhất định được chọn. Biểu tượng Shortcut trên hộp cơng cụ Cách sử dụng Option button cũng tương tự như của Check Box. Tạo nhĩm Option Button Tất cả các Option button đặt trực tiếp trên biểu mẫu (cĩ nghĩa là khơng thuộc vào Frame hoặc Picture Box) sẽ được xem như là một nhĩm. Nếu người dùng muốn tạo một nhĩm các Option button khác thì bắt buộc phải đặt chúng bên trong phạm vi của một Frame hoặc Picture box. Hình V.6 Nhĩm các option button II.4.2. Thuộc tính: o Name: thuộc tính tên của điều khiển Option Button. o Value: Giá trị hiện thời trên Option Button. Cĩ thể nhận các giá trị: True & False. II.4.3. Sự kiện: • Click: Xảy ra khi người sử dụng nhấp chuột trên Option Button. II.5 Điều khiển thanh cuộn ngang (HScrollBar) II.5.1. Khái niệm: Là điều khiển cĩ thanh trượt cho phép cuộn ngang và người dùng cĩ thể sử dụng HScrollBar như một thiết bị nhập hoặc một thiết bị chỉ định cho số lượng hoặc vận tốc. Ví dụ ta thiết kế volume cho một trị chơi trên máy tính hoặc để diễn đạt cĩ bao nhiêu thời gian trơi qua trong một khoảng định thời nhất định. Trang 52
  53. Visual Basic Biểu tượng Shortcut trên hộp cơng cụ Khi người dùng sử dụng Scroll Bar như một thiết bị chỉ định số lượng thì người dùng cần xác định giá trị cho hai thuộc tính Max và Min để đưa ra khoảng thay đổi thích hợp. II.5.2. Thuộc tính: o Name: Tên của thanh cuộn. o Min: Là giá trị nhỏ nhất trên thanh cuộn. o Max:: Giá trị lớn nhất của thanh cuộn. o Large change: Thuộc tính này dùng để xác định khoảng thay đổi khi người dùng ấn chuột lên Hscrollbar. o Small change: Thuộc tính này dùng để xác định khoảng thay đổi khi người dùng ấn lên mũi tên phía cuối thanh cuộn. o Value: Thuộc tính này trả về giá trị tại một thời điểm của thanh cuộn nằm trong khoảng giá trị [Min, Max] mà người dùng đã xác định. II.5.3. Sự kiện: o Change: Xảy ra mỗi khi HScrollBar thay đổi giá trị. o Scroll: Xảy ra mỗi khi ta di chuyển con trỏ thanh cuộn. II.5.4. Ví dụ: Hình V.7 Ví dụ về Hscrollbar Hình V.7 minh họa việc sử dụng thanh cuộn để thay đổi kích cỡ của ơ Text họ tên với đoạn mã đơn giản như sau: Private Sub HScroll1_Change() Text1.FontSize = HScroll1.Value End Sub Trang 53
  54. Visual Basic II.6 Điều khiển thanh cuộn đứng (VScrollBar) Biểu tượng shortcut trên hộp cơng cụ Các thuộc tính và cơng dụng của VScrollBar cũng tương tự như HScrollBar. II.7 Điều khiển hộp hình ảnh (Picture Box) II.7.1. Khái niệm: Điều khiển Picture Box cho phép người dùng hiển thị hình ảnh lên một biểu mẫu. Biểu tượng Shortcut trên hộp cơng cụ II.7.2. Thuộc tính: o Name: tên của điều khiển Picture Box. o Picture: Đây là thuộc tính cho phép xác định hình ảnh nào sẽ được hiển thị bên trong Picture box. Bao gồm tên tập tin hình ảnh và cả đường dẫn nếu cĩ. Để hiển thị hoặc thay thế một hình ảnh tại thời điểm chạy chương trình thì người dùng cĩ thể dùng phương thức LoadPicture để đặt lại giá trị của thuộc tính Picture với cú pháp như trong ví dụ dưới đây: picMain.Picture = LoadPicture("NEW.JPG") o Autosize: Khi giá trị của thuộc tính này là TRUE thì điều khiển Picture box sẽ tự động thay đổi kích thước cho phù hợp với hình ảnh được hiển thị. Ta nên cẩn thận khi sử dụng thuộc tính này vì khi điều khiển Picture Box thay đổi kích thước, nĩ khơng quan tâm đến vị trí của các điều khiển khác. II.7.3. Sự kiện: o Mouse Down: Xảy ra khi người sử dụng chương trình nhấn giữ phím chuột. o Mouse Move: Xảy ra khi người sử dụng chương trình di chuyển chuột. o Mouse Up: Xảy ra khi người sử dụng chương trình thả phím chuột. II.7.4. Ví dụ: Trang 54
  55. Visual Basic Private Sub Picture1_MouseMove(Button As Integer, Shift As _ Integer, X As Single, Y As Single) Picture1.Picture = LoadPicture("d:\quocdinh\new.jpg") End Sub II.7.5. Lưu ý: o Điều khiển Picture Box cĩ thể được dùng như một vật chứa các điều khiển khác (tương tự như một Frame). o Ngồi ra người dùng cũng cĩ thể sử dụng Picture Box như một khung vẽ hoặc như một khung soạn thảo và cĩ thể in được nội dung trên đĩ. II.8 Điều khiển hình ảnh (Image) II.8.1. Khái niệm: Điều khiển Image dùng để hiển thị một hình ảnh. Các dạng cĩ thể là Bitmap, Icon, Metafile, Jpeg, Gif. Tuy nhiên khác với điều khiển Picture Box điều khiển Image sử dụng tài nguyên hệ thống ít và cũng nạp ảnh nhanh hơn; hơn nữa số lượng thuộc tính và phương thức áp dụng ít hơn điều khiển Picture box. Biểu tượng Shortcut trên hộp cơng cụ II.8.2. Thuộc tính: o Name: tên của điều khiển Image. o Picture: Đây là thuộc tính cho phép xác định hình ảnh nào sẽ được hiển thị bên trong điều khiển Image. Bao gồm tên tập tin hình ảnh và cả đường dẫn nếu cĩ. Để hiển thị hoặc thay thế một hình ảnh tại thời điểm chạy chương trình thì người dùng cĩ thể dùng phương thức LoadPicture để đặt lại giá trị của thuộc tính Picture với cú pháp như trong ví dụ dưới đây: imgMain.Picture = LoadPicture("NEW.JPG") o Stretch: Khi giá trị của thuộc tính này là TRUE thì điều khiển Image sẽ tự động thay đổi kích thước cho phù hợp với hình ảnh được hiển thị. II.8.3. Sự kiện: o Mouse Down: Xảy ra khi người sử dụng chương trình nhấn giữ phím chuột. o Mouse Move: Xảy ra khi người sử dụng chương trình di chuyển chuột. o Mouse Up: Xảy ra khi người sử dụng chương trình thả phím chuột. Trang 55
  56. Visual Basic II.9 Điều khiển hình dạng (Shape) Biểu tượng Shortcut trên hộp cơng cụ Điều khiển Shape dùng để vẽ các hình dạng như: hình chữ nhật, hình vuơng, oval, hình trịn, hình chữ nhật gĩc trịn hoặc hình vuơng gĩc trịn. Thuộc tính Shape cho phép người dùng chọn 1 trong 6 dạng như đã nêu ở trên. Sau đây là bảng giá trị của thuộc tính này Hình dạng Giá trị Hằng Rectangle 0 vbShapeRectangle Square 1 vbShapeSquare Oval 2 vbShapeOval Circle 3 vbShapeCircle Rounded Rectangle 4 vbShapeRoundedRectangle Rounded Square 5 vbShapeRoundedSquare Hình V.9 dưới đây minh họa cho các dạng của điều khiển Shape Hình V.9: 6 dạng của điều khiển Shape Người dùng cĩ thể sử dụng các thuộc tính như BorderColor, BorderStyle, BorderWidth để xác định màu, dạng cũng như độ dày của đường biên. Tương tự với các thuộc tính FillColor, FillStyle để xác định màu và kiểu tơ nền. II.10 Điều khiển thời gian (Timer) II.10.1. Khái niệm: Điều khiển Timer đáp ứng lại sự trơi đi của thời gian. Nĩ độc lập với người sử dụng và ta cĩ thể lập trình để thực hiện một cơng việc nào đĩ cứ sau một khoảng thời gian đều nhau. Biểu tượng Shortcut trên hộp cơng cụ Việc đưa một điều khiển Timer và trong một biểu mẫu cũng tương tự như những điều khiển khác. Ở đây, ta chỉ cĩ thể quan sát được vị trí của điều khiển Timer Trang 56
  57. Visual Basic tại giai đoạn thiết kế, khi chạy ứng dụng điều khiển Timer coi như khơng cĩ thể hiện trên biểu mẫu. II.10.2. Thuộc tính: o Name: tên của điều khiển Timer. o Interval: Đây là thuộc tính chỉ rõ số ms giữa hai sự kiện kế tiếp nhau. Trừ khi nĩ bị vơ hiệu hĩa, mỗi điều khiển Timer sẽ luơn nhận được một sự kiện sau một khoảng thời gian đều nhau. Thuộc tính Interval nhận giá trị trong khoảng 0 64.767 ms cĩ nghĩa là khoảng thời gian dài nhất giữa hai sự kiện chỉ cĩ thể là khoảng một phút (64.8 giây). o Enabled: nếu giá trị là True nghĩa là điều khiển Timer được kích hoạt và ngược lại. II.10.3. Sự kiện: o Timer: xảy ra mỗi khi đến thời gian một sự kiện được thực hiện (xác định trong thuộc tính Interval). II.10.4. Sử dụng điều khiển Timer: o Khởi tạo một điều khiển Timer: Nếu lập trình viên muốn điều khiển Timer hoạt động ngay tại thời điểm biểu mẫu chứa nĩ được nạp thì đặt thuộc tính Enable là TRUE hoặc cĩ thể dùng một sự kiện nào đĩ từ bên ngồi để kích hoạt điều khiển Timer. o Lập trình đáp ứng sự kiện trả về từ điều khiển Timer: Ta sẽ đưa mã lệnh của cơng viêc cần thực hiện vào trong sự kiện Timer của điều khiển Timer. Sau đây là ví dụ khởi tạo một đồng hồ số nhờ vào điều khiển Timer. Private Sub Timer1_Timer() If Label1.Caption <> CStr(Time) Then Label1.Caption = Time End If End Sub Thuộc tính Interval được thiết lập là 500 (tức 0.5 giây). Điều khiển Timer cịn hữu ích trong việc tính tốn thời gian cho một cơng việc nào đĩ, đến một thời điểm nào đĩ thì ta sẽ khởi tạo một cơng việc mới hoặc ngưng một cơng việc khơng cịn cần nữa. II.11 Điều khiển danh sách ổ đĩa (DriveListbox), danh sách thư mục (DirListbox), danh sách tập tin (FileListbox) II.11.1. Khái niệm: o Điều khiển DriveListbox trình bày những ổ đĩa của hệ thống và cho phép người dùng chọn một trong những ổ đĩa đĩ. Biểu tượng shortcut (DriveListbox) trên hộp cơng cụ o Điều khiển DirListbox cho phép trình bày những thư mục và đường dẫn tại thời điểm chạy ứng dụng. Sử dụng điều khiển này để trình bày một danh sách cĩ thứ bậc của các thư mục, cĩ nghĩa là người dùng cĩ thể mở một tài liệu từ danh sách các tài liệu đã cĩ sẵn. Trang 57
  58. Visual Basic Biểu tượng shortcut (DirListbox) trên hộp cơng cụ o Điều khiển FileListbox cho phép trình bày những tài liệu cĩ sẵn trong thư mục hiện hành. Bạn cĩ thể dùng thuộc tính Partten để xác định kiểu tập tin nào được hiển thị trong danh sách. Biểu tượng shortcut (FileListbox) trên hộp cơng cụ Thơng thường các ứng dụng sẽ sử dụng kết hợp cả ba loại điều khiển trên là DriveListbox, DirListbox và FileListbox. II.11.2. Ví dụ: Các thuộc tính được thiết lập tại thời điểm thiết kế FileListbox: Partten = "*.doc" DriveListbox, DirListbox FileListbox: FontName = "Vncourier New". Tức là điều khiển FileListbox chỉ hiển thị các tập tin của Microsoft Word. Đoạn mã dưới đây được viết trong sự kiện Load của biểu mẫu Private Sub Form_Load() Dir1.Path = "c:\" File1.Path = "c:\" End Sub Hình V.10 : Ví dụ về các điều khiển ổ đĩa, thư mục và tập tin Trang 58
  59. Visual Basic Đoạn mã trên cho phép xác định đường dẫn hiện hành của điều khiển DirListbox, FileListbox tại thời điểm nạp ứng dụng là "C:\". Khi chạy ứng dụng ta được như hình V.10. Khi ta thay đổi ổ đĩa thì các thư mục sẽ thay đổi theo đĩ là những thư mục ở ổ đĩa hiện hành, sự thay đổi cũng diễn ra tương tự đối với danh sách các tập tin. Cần chú ý rằng đối với ổ đĩa mềm và CD thì cần thiết phải cĩ đĩa mềm hoặc CD tại thời điểm chọn ở đĩa nếu khơng sẽ xảy ra lỗi tại thời điểm chạy ứng dụng. Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Bên trên là những đoạn mã đáp ứng lại việc người dùng chọn việc thay đổi ổ đĩa và thư mục. Trong danh sách các tập tin ta chỉ hiển thị những file *.doc. Trang 59
  60. Visual Basic CHƯƠNG 6: LẬP TRÌNH XỬ LÝ GIAO DIỆN & ĐỒ HỌA Mục tiêu: Chương này giới thiệu về cách tạo menu cũng như một số hàm xử lý đồ họa, những thành phần quan trọng trong các ứng dụng chạy trên Windows. Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau: - Sử dụng menu trong thiết kế giao diện. - Sử dụng các hộp thoại trong thiết kế ứng dụng. - Sử dụng các phương thức đồ họa cùng với cách xử lý một số sự kiện để tạo các ứng dụng đồ họa. Kiến thức cĩ liên quan: - Các cấu trúc lập trình trong VB. - Cách thức xử lý sự kiện. Tài liệu tham khảo: - Microsoft Visual Basic 6.0 và Lập trình Cơ sở dữ liệu - Chương 7, trang 99 - Nguyễn Thị Ngọc Mai (chủ biên), Nhà xuất bản Giáo dục - 2000. Trang 60
  61. Visual Basic I. Menu I.1. Khái niệm Menu là một loại điều khiển trong đĩ người sử dụng cĩ thể lựa chọn các mục từ một danh sách cho trước. Cĩ 2 loại menu: - Menu thả xuống (Drop-Down Menu): là dạng menu thơng dụng nhất. - Menu bật ra (Pop-Up Menu): thường hiển thị khi ta ấn nút phải chuột. I.2. Các thuộc tính của Menu Các thuộc tính của Menu khơng chứa trong cửa sổ Properties mà chứa trong Menu Editor. - Caption: Là chuỗi hiển thị trên menu. - Name: Phải duy nhất và dễ nhớ. Đây là tên để nhận biết thành phần nào của Menu được chọn. - Shortcut: dùng để thiết lập các phím tắt (Shortcut key). - WindowList: Dùng trong các ứng dụng MDI (Multipe Document Interface). Đây là ứng dụng cĩ một biểu mẫu chính và nhiều biểu mẫu con. Thuộc tính này ra lệnh cho VB hiển thị tiêu đề của các biểu mẫu con trên menu. - Checked: Nếu chọn thuộc tính này thì sẽ cĩ một dấu hiển thị bên cạnh trái, nhưng thuộc tính này khơng được áp dụng cho những mục menu cĩ chứa menu con. - Enabled: Nếu thuộc tính này khơng được chọn thì mục này sẽ bị xám đi và người dùng khơng thể chọn. - Visible: Nếu thuộc tính này khơng được chọn thì mục này sẽ khơng được hiển thị. - NegotiatePosition: quản lý vị trí gắn menu trong trường hợp sử dụng các đối tượng ActiveX. I.3. Các sự kiện - Click: Xảy ra khi người sử dụng chương trình nhấp chuột vào một mục nào đĩ của Menu. I.4. Cách tạo Menu Menu cũng là một loại điều khiển, nhưng Windows sẽ kiểm sốt việc vẽ menu. Lập trình viên chỉ quản lý việc điều hành các sự kiện mà thơi. Trang 61
  62. Visual Basic Hình VI.1 Trình soạnthảoMenu Menu khơng chứa trong hộp cơng cụ mà được thiết kế từ trình soạn thảo menu. Trong Visual Basic 6.0 IDE, chọn Tools, rồi Menu Editor để mở chương trình này. Ví dụ: Tạo một Drop-Down Menu. - Tạo một đề án mới. - Ấn Ctrl-E để mở Menu Editor - Ta sẽ tạo một Menu File với Menu con là Open và Save As. - Trước tiên ta nhập vào &File trong ơ Caption và nhập một tên bất kỳ vào ơ Name (chẳng hạn là mfile). Ký tự & trước chữ F cho biết chữ F sẽ là phím tắt (ấn Ctrl- F) coi như chọn menu File. - Tiếp theo ta nhập &Open và &Save As. Để Open và Save As là Sub menu của File, ta chọn Open rồi ấn mũi tên sang trái. Tương tự đối với Save As. Hình VI.2 Ví dụ tạo Popup Menu Trang 62
  63. Visual Basic Tách nhĩm menu: Trong trường hợp Menu cĩ nhiều mục, ta sẽ tách nhĩm Menu để tiện theo dõi. Chẳng hạn ta thêm vào Menu File mục Exit và tách riêng ra với Open và Save As. Ta sẽ xen vào giữa hai mục Save As và Exit một mục mới cĩ Caption là “-“. Ta cĩ thể theo dõi qua hình VI.3. Hình VI.3 Ví dụ tách nhĩm các Ví dụ: Tạo Pop-up menu - Sử dụng lại menu đã dùng ở ví dụ trước, nhưng ta sẽ tắt thuộc tính Visible của menu File. - Sau đĩ, mở cửa sổ Code của ứng dụng, dùng sự kiện MousUp, nhập vào đoạn lệnh sau: Private Sub Form_MouseUp (Button As Integer, Shift As _ Integer, X As Single, Y As Single) If Button = vbRightButton Then PopupMenu mfile, vbPopupMenuLeftAlign End If End Sub - Chạy thử ứng dụng, khi ta ấn chuột phải, một menu sẽ bật ra. - Lệnh PopupMenu cho biết tên menu cần bật ra, đĩ là tên mà ta đã đặt trong trình soạn thảo MenuEditor, ở đây là mfile. - Kế đến, đĩ là tham số xác định cách hiển thị menu: vbPopupMenuLeftAlign, vbPopupMenuRightAlign, vbPopupMenuCenterAlign. Sau khi đã thiết kế xong menu, ta sẽ viết các đoạn mã để VB sẽ thi hành một cơng việc nào đĩ tương ứng với mục được chọn. Cơng việc thi hành sẽ được viết bên trong sự kiện Click của mục đĩ. Trang 63
  64. Visual Basic II. Hộp thoại II.1. Khái niệm Hộp thoại (Dialog Box) là một trong những cách VB dùng để giao tiếp với người dùng. Cĩ 4 loại hộp thoại: - Hộp thơng điệp (Message Box). - Hộp nhập (Input Box). - Các hộp thoại thơng dụng (Common Dialog) - Hộp thoại hiệu chỉnh (Custom Dialog). II.2. Hộp thơng điệp Hộp thơng điệp cũng cĩ 2 loại: Loại chỉ xuất thơng báo, loại cĩ tương tác với người dùng. II.2.1 Loại chỉ xuất thơng báo - Lúc này ta dùng MsgBox như là một thủ tục. - Cú pháp: MsgBox Prompt, Button, Title. Trong đĩ: Prompt: Chuỗi thơng báo sẽ hiển thị. Button: Các nút nhấn sẽ được hiển thị trên hộp thơng báo. Title: Chuỗi hiển thị trên thanh tiêu đề của hộp thơng báo. - Ví dụ: Hình VI 4 Hộp thơng điệp Chẳng hạn ta xây dựng một biểu mẫu dùng để hiển thị tên và điểm trung bình cuối năm của một học sinh khối lớp 12. Do đĩ giá trị điểm trung bình cũng như họ tên học sinh là khơng thể thay đổi. Do đĩ khi ngưịi dùng Click vào một ơ Text nào đĩ, ta sẽ xuất thơng báo rằng giá trị này khơng thể thay đổi. Trang 64
  65. Visual Basic Private Sub Text2_Click() MsgBox "Vous ne pouvez pas changer la value de ce champ!" End Sub Sau khi xuất thơng báo, VB sẽ đợi ta ấn vào nút OK hoặc Enter. Sau đĩ VB sẽ thi hành dịng lệnh ngay sau dịng lệnh MsgBox. Đơi khi dịng thơng báo quá dài, VB sẽ tự động cắt để đưa xuống dịng khác, tuy nhiên cĩ khi sẽ khơng như mong muốn của lập trình viên. Ta cĩ thể thực hiện cơng việc này như sau: MsgBox “This is a multi-line “ & chr$(10) & “ message” Tùy theo thơng số truyền vào MsgBox mà cĩ nhiều loại hộp thoại thơng điệp khác nhau. Hằng số Giá trị Diễn giải vbOKOnly 0 Chỉ hiển thị nút OK . vbOKCancel 1 Hiển thị 2 nút OK và Cancel. vbAbortRetryIgnore 2 Hiển thị các nút Abort, Retry, và Ignore. vbYesNoCancel 3 Hiển thị các nút Yes, No, và Cancel. vbYesNo 4 Hiển thị 2 nút Yes và No. vbRetryCancel 5 Hiển thị 2 nút Retry và Cancel. Các loại biểu tượng trên hộp cơng cụ Hằng số Diễn giải Dùng cho những thơng báo lỗi thất bại khi vbCritical thi hành cơng việc nào đĩ. Dùng cho những câu hỏi yêu cầu người vbQuestion dùng chọn lựa. vbExclamation Dùng cho các thơng báo của chương trình. Dùng cho các thơng báo cung cấp thêm vbInformation thơng tin. II.2.2 Loại tương tác với người dùng Lúc này MsgBox được dùng như một hàm, khi một nút nào đĩ trên hộp thơng báo được ấn, VB sẽ trả về giá trị của nút ấn đĩ. Cú pháp: MsgBox (Prompt, Button, Title) As Integer Hằng số Giá trị Nút vbOK 1 OK vbCancel 2 Cancel vbAbort 3 Abort vbRetry 4 Retry vbIgnore 5 Ignore vbYes 6 Yes Trang 65
  66. Visual Basic vbNo 7 No Với những thơng điệp quan trọng, ta mong muốn người dùng phải chọn lựa một trong các đề xuất mà ta đưa ra trước khi chuyển qua ứng dụng khác, ta sẽ dùng thơng số vbSystemModal. Trang 66
  67. Visual Basic II.3. Hộp nhập Đây là loại hộp thơng điệp cho phép nhận thơng tin từ phía người sử dụng. Tuy nhiên trong các ứng dụng, hộp nhập rất ít khi được dùng do: - Ta khơng cĩ cách nào để kiểm tra thơng tin do người dùng nhập vào khi mà Enter chưa được ấn. - Thơng tin được nhập là rất ít. Sau đây là một ví dụ về hộp nhập: Public Sub Main () Dim ReturnString As String ReturnString = InputBox(“Nhap vao ten cua ban”) End Sub Giá trị trả về của hộp nhHìnhập làVI mộ5t chuHộỗpni. hậptên II.4. Các hộp thoại thơng dụng Cĩ 6 loại hộp thoại thơng dụng: - Mở tập tin - Lưu tập tin - Chọn màu - Chọn Font - In ấn - Trợ giúp Tuy cĩ 6 loại, nhưng khi thiết kế biểu mẫu, ta chỉ thấy một cơng cụ duy nhất đĩ là CommonDialog. Muốn đưa Common Dialog vào dự án, ta chọn: Project/Components /Controls/Microsoft Common Dialog Control 6.0. Sau đĩ, Common Dialog sẽ xuất hiện trong hộp cơng cụ ToolBox. II.4.1 Hộp thoại mở và lưu tập tin Hai hộp thoại này cĩ chức năng và thể hiện như nhau. Cả hai hộp thoại đều hiển thị danh sách các tập tin, người dùng cĩ thể duyệt qua các ổ đĩa để tìm các tập tin. Chúng chỉ khác nhau phần tiêu đề và nút nhấn. Các thuộc tính quan trọng: o Name: tên của Common Dialog. o Filter: đây là một chuỗi xác định phần mở rộng của tên các tập tin mà hộp thoại cĩ thể mở hay lưu. Trang 67
  68. Visual Basic o FilterIndex: nếu cĩ nhiều phần mở rộng của tên tập tin được mơ tả trong thuộc tính Filter thì thuộc tính này xác định mặc định loại tập tin nào được chọn (là một số nguyên). o FileName: trả về tên tập tin sau khi người sử dụng hộp thoại chọn một tập tin nào đĩ. o CancelError: nếu TRUE thì trả về giá trị lỗi khi người dùng chọn nút Cancel, mặc nhiên giá trị này là False. Phương thức: o ShowOpen: mở ra hộp thoại mở tập tin. o ShowSave: mở ra hộp thoại lưu tập tin. Ví dụ: Private Sub Form_Load() On Error GoTo ErrHandler dlgFile.Filter = "All Files (*.*)|*.*|Text Files “ & _ “(*.txt)|*.txt|Batch Files (*.bat)|*.bat" dlgFile.FilterIndex = 2 dlgFile.ShowOpen Exit Sub ErrHandler: MsgBox Err.Description End Sub Ở ví dụ trên, ta thiết kế một hộp thoại mở tập tin, trong đĩ các tập tin được hiển thị theo 3 nhĩm tập tin đĩ là: - All Files: (*.*) - Text Files: (*.txt) - Batch Files: (*.bat) Các nhĩm tập tin được thể hiện trong thuộc tính Filter. Mỗi nhĩm tập tin cách nhau bởi dấu phân cách |. Thuộc tính FilterIndex = 2 tức là khi hộp thoại Open được mở lên, thì loại tập tin hiển thị mặc định là Text Files. Sau khi đã chọn một tập tin và nhấn nút Open, ta sử dụng thuộc tính FileName để nhận về tên tập tin đã chọn. Khi ta chọn thuộc tính CancelError là TRUE, thì khi người dùng ấn nút Cancel trên hộp thoại, ta sẽ nhận được một lỗi và sẽ cĩ cách xử lý lỗi này. Ta chọn phương thức ShowOpen để hiển thị hộp thoại mở tập tin. Trang 68
  69. Visual Basic Hình VI.6 Hộp thoạimở tậptin Các thuộc tính cũng tương tự đối với hộp thoại lưu tập tin, ta chỉ cần thay đổi tiêu đề của Dialog và dùng phương thức ShowSave. Dưới đây là minh họa cho hộp thoại lưu tập tin. Hình VI.7 Hộp thoại lưu tập tin Trang 69
  70. Visual Basic II.4.2 Hộp thoại chọn màu Đây là hộp thoại cho phép người dùng chọn và hiển thị các màu cĩ sẵn trong bảng màu của Windows cũng như thiết lập thêm nhiều màu mới. Một thuộc tính quan trọng đối với hộp thoại chọn màu đĩ là thuộc tính Color, thuộc tính này trả về giá trị của màu đã được chọn. Ta sẽ dùng phương thức ShowColor để hiển thị hộp thoại chọn màu. Hình VI.8 Hộp thoại chọn màu Trong một số ứng dụng, ta sẽ dùng hộp thoại chọn màu để thay đổi giá trị màu của các điều khiển trong một số trường hợp nào đĩ. Ví dụ thay đổi màu nền của điều khiển TextBox trong ví dụ dưới đây: Trang 70
  71. Visual Basic Hình VI.9 Ví dụ sử dụng hộp thoại chọn mầu Ta sẽ thiết kế một nút nhấn nhỏ bên cạnh điều khiển TextBox, nút nhấn này cho phép người sử dụng chọn màu nền của TextBox. Ta cĩ đoạn mã lệnh sau: Private Sub Command2_Click() On Error GoTo ErrHandler CommonDialog1.ShowColor Text1.BackColor = CommonDialog1.Color ErrHandler: CommonDialog1.ShowColor End Sub Trước khi chạy chương trình cần xác định thuộc tính CancelError = TRUE. II.4.3 Hộp thoại chọn Font chữ Cho phép người dùng chọn Font màn hình, máy in hay cả hai. Khi dùng hộp thoại chọn Font ta phải dùng thuộc tính Flags quy định loại Font nào sẽ được hiển thị. Hình VI.10 Hộp thoại Font Thuộc tính Giải thích Color Lưu giữ giá trị của màu được chọn FontBold TRUE nếu người dùng chọn chế độ đậm (Bold) và FALSE nếu Trang 71
  72. Visual Basic ngược lại. FontItalic TRUE nếu người dùng chọn chế độ nghiêng (Italic) và FALSE nếu ngược lại. FontStrikeThru TRUE nếu chọn chế độ gạch ngang các ký tự. FontUnderLine TRUE nếu chọn chế độ gạch dưới FontName Tùy ý Max Kích cỡ lớn nhất của Font được hiển thị Min Kích cỡ nhỏ nhất của font được hiển thị FontSize Kích cỡ của Font được chọn Các giá trị của thuộc tính Flags: Hằng Giá trị Hiệu quả cdlCFPrinterFonts &H2 Chỉ hiển thị font máy in cdlCFScreenFonts &H1 Chỉ hiển thị font màn hình cdlCFBoth &H3 Chỉ hiển thị font màn hình và font máy in cdlCFScalableOnly &H20000 Hiển thị font tỷ lệ như là fonts TrueType Nếu muốn chọn màu cho Font, ta thêm 256 vào giá trị của thuộc tính Flags. Nếu khơng cĩ điều này, ta chỉ thấy tên Font, kiểu Font và kích cỡ Font mà thơi. Để mở hộp thoại chọn Font, ta sử dụng phương thức ShowFont. II.4.4 Hộp thoại in ấn Đây là hộp thoại cho phép xác lập các thơng tin về máy in chẳng hạn như bao nhiêu dữ liệu được in, máy in sẽ hoạt động như thế nào Hộp thoại in ấn, nĩ trả về 3 thuộc tính thơng dụng: Copies, FromPage và ToPage. Hình VI.11 Hộp thoại in ấn Thuộc tính Giải thích Copies Số bản in FromPage Số thứ tự của trang bắt đầu Max Số bản in tối đa cho phép Trang 72
  73. Visual Basic Min Số bản in tối thiểu cho phép PrinterDefault Nếu gán thành TRUE, mọi thay đổi mà người dùng thực hiện sẽ được ghi lại thành các thay đổi trên hệ thống và cĩ ảnh hưởng đến các ứng dụng khác nếu cĩ sử dụng máy in. ToPage Số thứ tự của trang in cuối cùng Để mở hộp thoại in ấn, ta sử dụng phương thức ShowPrinter. III. Xử lý các sự kiện chuột và bàn phím III.1 Sự kiện chuột Biểu mẫu hoặc điều khiển cĩ thể nhận biết sự kiện chuột khi cĩ con trỏ chuột đi ngang qua. Cĩ 3 sự kiện chuột chủ yếu, đĩ là Sự kiện Giải thích MouseDown Xảy ra khi người sử dụng ấn chuột (chuột trái hoặc phải) MouseUp Xảy ra khi người sử dụng thả một nút chuột bất kỳ MouseMove Xảy ra khi con trỏ chuột di chuyển đến một điểm mới trên màn hình. Các tham số Tham số Giải thích Button Cho biết phím chuột nào được ấn Shift Cho biết SHIFT hay CTRL hay ALT được ấn X, Y Xác định vị trí của con trỏ chuột đối với hệ tọa độ của điều khiển Ví dụ 1: Sử dụng sự kiện MouseDown để vẽ các đoạn thẳng nối tiếp nhau mỗi khi ta dùng chuột chấm một điểm trên biểu mẫu. Ta cĩ thể thực hiện điều đĩ với đoạn mã lệnh xử lý sự kiện Form_MouseDown như sau: Private Sub Form_MouseDown(Button As Integer, & _ Shift As Integer, X As Single, Y As Single) Line -(X, Y) End Sub Trang 73
  74. Visual Basic Ví dụ 2: Sử dụng sự kiện MouseUp để hiển thị một thơng điệp cho biết nút chuột nào vừa được thả. Sự kiện Form_MouseUp được xử lý: Private Sub Form_MouseUp (Button As Integer, & _ Shift As Integer, X As Single, Y As Single) If Button = 1 Then Print “Ban vua tha phim chuot trai” End If If Button = 2 Then Print “Ban vua tha phim chuot phai” End If If Button = 4 Then Print “Ban vua tha phim chuot giua” End If End Sub Ví dụ 3: Sử dụng sự kiện MouseMove để vẽ các đường trịn liên tục trên biểu mẫu. Sự kiện Form_MouseMove được xử lý: Private Sub Form_MouseMove(Button As Integer, & _ Shift As Integer, X As Single, Y As Single) Circle (X, Y), 50 End Sub Trang 74
  75. Visual Basic Hình VI.13 Ví dụ về MouseMove Với ví dụ 3 ta nhận thấy rằng: sự kiện MouseMove khơng nhất thiết phải xảy ra ứng với mỗi Pixel khi con trỏ chuột đi qua. Thực ra mỗi đơn vị thời gian nào đĩ, hệ điều hành phát ra một số thơng điệp. Ở đây, ta vẽ đường trịn ứng với sự kiện MouseMove, nếu người dùng di chuyển chuột chậm, thì các đường trịn sẽ được vẽ sát nhau và ngược lại nếu chuột được di chuyển nhanh. Hiệu chỉnh con trỏ chuột Ta cĩ thể dùng thuộc tính MousePointer để hiển thị một biểu tượng, con trỏ màn hình hay con trỏ chuột đã được hiệu chỉnh. Dưới đây là các giá trị của thuộc tính MousePointer: Hằng Giá trị Diễn giải ccDefault 0 (Default) Shape determined by the object. ccArrow 1 Arrow. ccCross 2 Cross (cross-hair pointer). ccIbeam 3 I Beam. ccIcon 4 Icon (small square within a square). ccSize 5 Size (four-pointed arrow pointing north, south, east, and west). ccSizeNESW 6 Size NE SW (double arrow pointing northeast and southwest). ccSizeNS 7 Size N S (double arrow pointing north and south). ccSizeNWSE 8 Size NW, SE. ccSizeEW 9 Size E W (double arrow pointing east and west). ccUpArrow 10 Up Arrow. ccHourglass 11 Hourglass (wait). ccNoDrop 12 No Drop. ccArrowHourglass 13 Arrow and hourglass. ccArrowQuestion 14 Arrow and question mark. ccSizeAll 15 Size all. Trang 75
  76. Visual Basic ccCustom 99 Custom icon specified by the MouseIcon property. III.2 Sự kiện bàn phím Bàn phím cũng cĩ 3 sự kiện, đĩ là sự kiện KeyPress (khi một phím cĩ mã ASCII bất kỳ được ấn), KeyDown (khi một phím bất kỳ được ấn), KeyUp (khi một phím bất kỳ được thả) Chỉ cĩ điều khiển đang cĩ Focus mới bắt sự kiện bàn phím. Cịn đối với biểu mẫu, nĩ chỉ bắt được sự kiện bàn phím mỗi khi nĩ đã được kích hoạt và khơng cĩ bất kỳ điều khiển nào trên nĩ cĩ Focus. Tuy nhiên ta cĩ khể khắc phục điều này nếu như gán giá trị thuộc tính KeyPreview của biểu mẫu là True, biểu mẫu sẽ nhận mọi sự kiện bàn phím của mọi điều khiển đặt trên nĩ, điều này hữu ích khi ta muốn thực hiện cùng một cơng việc nào đĩ cho một phím được ấn mà khơng quan tâm rằng Focus đang thuộc điều khiển nào. Các sự kiện KeyDown, KeyUp cĩ thể phát hiện một số tình huống mà sự kiện KeyPress khơng phát hiện: - Khi người dùng bấm một tổ hợp phím SHIFT, CTRL và ALT. - Phím định hướng. - PAGEUP và PAGEDOWN. - Phân biệt được phím số ở bên phải bàn phím và phím số ở bên trái bàn phím. - Đáp ứng khi thả phím. - Phím chức năng khơng trùng với menu. Các sự kiện bàn phím là khơng loại trừ nhau. Tức là một phím được ấn thì cĩ thể là cả hai sự kiện KeyPress và KeyDown cùng được phát ra. Nhưng nếu là một phím mà KeyPress khơng phát hiện được thì chỉ cĩ KeyDown và KeyUp xảy ra. Thuộc tính KeyPreview Đơi khi ta muốn tất cả các điều khiển trên Form nhận được sự kiện KeyPress chứ khơng phải chỉ cĩ điều khiển đang nhận con trỏ (Focus), ta sẽ phải sử dụng thuộc tính KeyPreview. Khi chúng ta thiết kế một Form, giá trị mặc định của thuộc tính này sẽ là False, khi đĩ bất kỳ một sự kiện bàn phím nào cũng đều được gởi đến điều khiển đang giữ quyền điều khiển. Tuy nhiên nếu giá trị của thuộc tính là True thì Form sẽ là nơi nhận mọi sự kiện bàn phím. Sau đây là ví dụ về điều này: Private Sub Form_KeyPress (KeyAscii As Integer) ' Gởi điều khiển đến textbox đầu tiên txtForward.SetFocus txtBackward.Text = Chr(KeyAscii) & txtBackward.Text txtAscii.Text = txtAscii.Text & CStr(KeyAscii) & ",” End Sub Trang 76