Phát triển ứng dụng với Visual Basic 6

Micrsoft Visual Basic (viết tắt là VB) là cách dễ dàng nhất và nhanh nhất để xây dựng 1 chương trình ứng dụng chạy trên nền Microsoft Windows. VB cũng cấp sẵn 1 tập đầy đủ các công cụ để làm nhanh, đơn giản quá trình phát triển ứng dụng. “Visual” chỉ cách tạo giao diện người dùng đồ hoạ (GUI – graphic user interface) một cách trực quan. Thay vì phải viết rất nhiều dòng mã lệnh để mô tả hình dáng và vị trí của các phần tử tạo nên giao diện, ta chỉ cần đặt những đối tượng đã được xây dựng sẵn lên màn hình (như cách vẽ một bức tranh bằng chương trình Paint). “Basic” chỉ tới ngôn ngữ lập trình BASIC (Beginners All-Purpose Symbolic Intstruction Code), một trong những ngôn ngữ lập trình nổi tiếng. VB phát triển từ ngôn ngữ BASIC và hiện chứa rất nhiều câu lệnh, hàm, từ khoá, mà nhiều trong số chúng có liên quan trực tiếp tới GUI của Windows. Người mới lập trình có thể tạo những chương trình hữu ích bằng cách học sử dụng một số ít các câu lệnh. Còn những người lập trình chuyên nghiệp có thể sử dụng VB để thực hiện bất kỳ công việc nào mà các ngôn ngữ lập trình cho Windows khác có thể làm được. Ngôn ngữ lập trình Visual Basic không chỉ duy nhất được sử dụng trong xây dựng chương trình bằng sản phẩm Microsoft Visual Basic. Phiên bản VB cho lập trình các ứng dụng (VBA) có trong Microsoft Excel, Microsoft Access, . VBScript là ngôn ngữ script được sử dụng rộng rãi trong các ứng dụng Web.

doc95 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 3297 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Phát triển ứng dụng với Visual Basic 6, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
(Alphabetic) hay theo phân loại (Categorized) Properties list: Danh sách các thuộc tính gắn với đối tượng được chọn (trên form hay từ object box) Viết mã lệnh Mở Code Editor bằng cách: Nhấn đúp lên control hoặc chọn View Code từ cửa sổ Project Explorer. Tạo thủ tục đáp ứng sự kiện + Chọn control từ hộp danh sách bên trái (chứa form và các control) + Chọn tên sự kiện từ hộp bên phải (chứa danh sách sự kiện gắn với đối tượng vừa được chọn) Private Sub Command1_Click () Text1.Text = "Hello, world!" End Sub Để chuyển đổi hiển thị tất các thủ tục trên cùng 1 cửa sổ và hiển thị mỗi thủ tục tại 1 thời điểm: + Chọn Tools | Options + Thay đổi các giá trị tương ứng trong tab: Editor Chạy chương trình: Chọn Run | Start hay nhấn F5 hoặc Nút Start để chạy chương trình Chọn Run | End hoặc nút Stop để dừng chương trình đang chạy Chọn Run | Break hay nhấn hoặc nút Pause để kết thúc chương trình bất thường Làm việc với Project Một project (dự án) trong Visual Basic thường bao gồm: Một file dự án quản lý tất các thành phần của chương trình (*.vbp). Một file cho mỗi form (*.frm). Một file dạng nhị phân cho mỗi form chứa các thông tin về form và các control (*.frx). Có thể có 1 file cho mỗi module class (*.cls). Có thể có 1 file cho mỗi module standard (*.bas). Có thể có 1 file cho mỗi ActiveX control (.ocx). Có thể có 1 file tài nguyên (resource file) (*.res). Project Explorer Là nơi chúng ta tạo mới, thêm vào, loại bỏ các file cho dự án. Tạo, mở, lưu trữ một project Bằng cách sử dụng các lệnh sau: Tên lệnh Mô tả New Project Đóng project hiện tại; Tạo 1 project mới. Open Project Đóng project hiện tại; Mở 1 project có sẵn. Save Project Lưu trữ, cập nhật file project, cũng như mọi file thành phần của nó. Save Project As Lưu file project với tên mới được nhập vào. Đặt tuỳ chọn cho Project Bằng cách sử dụng hội thoại Project Properties, từ mục chọn Project Properties trên thực đơn Project Tuỳ chọn Mô tả Startup Object Form đầu tiên mà Visual Basic sẽ gọi, hay thủ tục đặc biệt Sub Main( ). Project Name Tên dự án, không nên vượt quá 37 kí tự. Help File Tên của file trợ giúp gắn với chương trình. Project Help Context ID Mã ngữ cảnh (context ID). Project Description Mô tả chung về dự án. Ngoài những tuỳ chọn trên, mỗi project còn có nhiều tuỳ chọn khác nữa. Form và Control Thuộc tính, sự kiện, phương thức Form Control: Label, Text box, Check box, Option Group, List/Combo box, ... Focus Tab order (Thứ tự Tab) Dialog box (hộp hội thoại) Thuộc tính, sự kiện, phương thức Form và control (điều khiển) của Visual Basic là các đối tượng với thuộc tính (property), phương thức (method) và sự kiện (event). Thuộc tính là các đặc điểm qui định đối tượng, phương thức là các hành động và sự kiện là sự đáp ứng tác động gắn với mỗi đối tượng. Quả bóng bay là 1 đối tượng. Nó có các thuộc tính như các thuộc tính trực quan: “độ cao”, “đường kính”, “màu sắc”. Các thuộc tính khác như thuộc tính mô tả trạng thái quả bóng (“căng tròn” hay chưa), hay các thuộc tính khác như thời gian sản xuất. Mọi quả bóng bay đều có đầy đủ tập thuộc tính trên; nhưng với mỗi quả bóng, giá trị cụ thể các thuộc tính đó là khác nhau. Quả bóng bay có sẵn các phương thức hay hành động mà nó có thể thực hiện. Nó có phương thức: “bơm” (hành động bơm hơi vào quả bóng), “xì” (xì hơi chứa bên trong), “bay” (bay lên cao nếu được thả ra). Quả bóng bay cũng có sẵn cách trả lời cho những sự kiện bên ngoài nhất định. Ví dụ: 1 quả bóng sẽ đáp ứng lại sự kiện bị châm thủng bằng cách xì hơi, hay sự kiện được thả ra bằng cách bay cao. Nếu lập trình 1 quả bóng, đoạn mã lệnh trong Visual Basic sẽ có dạng sau: Balloon.Color = Red Balloon.Diameter = 10 Balloon.Inflated = True Chú ý cú pháp: đối tượng (Balloon) theo sau bởi thuộc tính (.Color) được gán giá trị (Red). Chúng ta có thể thay đổi thuộc tính 1 đối tượng bằng mã lệnh như trên khi chạy chương trình, hay từ cửa sổ Properties khi thiết kế. Phương thức của 1 quả bóng có thể được gọi như sau: Balloon.Inflate Balloon.Deflate Balloon.Rise 5 Cú pháp tương tự như với thuộc tính. Trong ví dụ 3, có thêm tham số truyền cho phương thức để mô tả thêm hành động. Quả bóng có thể đáp ứng 1 sự kiện như sau: Sub Balloon_Puncture() Balloon.Deflate Balloon.MakeNoise "Bang" Balloon.Inflated = False Balloon.Diameter = 1 End Sub Chúng ta không thực sự có thể lập trình 1 quả bóng bay. Nhưng thực sự, chúng ta lập trình với form và control trong Visual Basic theo cách tương tự. Form Đối tượng form là thành phần cơ sở của 1 chương trình viết bằng Visual Basic, là cửa số giao diện với người dùng. Form có thuộc tính, sự kiện, phương thức. Bước đầu tiên trong thiết kế form là đặt giá trị các thuộc tính. Thuộc tính có thể đặt giá trị tại thời điểm thiết kế (design time) bằng tay, hay khi chạy chương trình (run time) bằng mã lệnh. Đặt giá trị thuộc tính cho form Form có nhiều thuộc tính qui định hình thức như: Caption, Icon, MaxButton, MinButton, BorderStyle, Height, Width, Left, Top, WindowState, ... Thuộc tính Name đặt tên cho form - đó là tên biến được sử dụng để thao tác với form khi lập trình (ví dụ: frmEntry). Chúng ta có thể tìm hiểu về từng thuộc tính bằng cách chọn thuộc tính rồi nhấn F1 để hiển thị trợ giúp ngữ cảnh. Phương thức và sự kiện của form Như mọi đối tượng, form thực hiện các phương thức và đáp ứng các sự kiện. Sự kiện Resize được kích hoạt khi kích cỡ form bị thay đổi. Sự kiện Activate được kích hoạt khi form được gọi. Deactivate được gọi khi 1 form hay 1 ứng dụng khác được gọi. Để làm 1 form xuất hiện, sự dụng phương thức Show tenform.Show Gọi phương thức Show khiến thuộc tính Visible của form có giá trị True. Có nhiều phương thức của form làm việc với văn bản và hình ảnh như: Print, Line, Circle, Refresh giúp in hay vẽ trực tiếp lên bề mặt form. Command button Command button (nút lệnh) cho phép người sử dụng nhấn vào để thực hiện 1 hành động. Khi người dùng nhấn vào nút lệnh, thủ tục sự kiện Click được gọi. Lập trình viên viết lệnh vào thủ tục sự kiện Click để thực hiện hành động mong muốn. Có nhiều cách để chọn 1 command button: Nhấn chuột vào command button Dùng phím Tab chuyển tới command button, rồi ấn SPACEBAR hay ENTER. Nhấn Dùng mã lệnh thay đổi thuộc tính Value: cmdClose.Value = True Gọi thủ tục sự kiện Click: cmdClose_Click Nếu command button là command button mặc định trên form, nhấn ENTER khi không có nút lệnh nào đang được chọn. Lúc thiết kế, chúng ta đặt command button mặc định bằng cách thay đổi giá trị thuộc tính Default thành True. Nếu command button là Cancel button mặc định trên form, nhấn ESC. Lúc thiết kế, chúng ta đặt Cancel button mặc định bằng cách thay đổi giá trị thuộc tính Cancel mặc định thành True. Tất cả các cách trên khiến Visual Basic gọi thủ tục sự kiện Click. Label Label (nhãn) hiển thị văn bản mà người dùng không thể trực tiếp thay đổi. Ta có thể sử dụng label để định danh các control không có thuộc tính Caption, chẳng hạn text box và scroll bar. Văn bản được hiển thị trong một label được điều khiển bởi thuộc tính Caption, thuộc tính này có thể được đặt khi thiết kế tại cửa sổ Properties hay khi chạy bằng cách gán trị cho nó trong mã chương trình. Mặc định, caption là phần duy nhất nhìn thấy được của label. Ngoài ra, các thuộc tính khác, như BackColor, BackStyle, ForeColor, và Font, quy định hiển thị của label. Labels có 2 thuộc tính giúp văn bản trong nó phù hợp với kích cỡ của: AutoSize and WordWrap. Đặt AutoSize=True khiến nhãn tự thay đổi kích cỡ để vừa với nội dung trong thuộc tính Caption. WordWrap khiến lable thay đổi kích cỡ theo chiều dọc để chứa hết văn bản. Chú ý: WordWrap chỉ có hiệu lực khi AutoSize cũng đã được đặt là True. Text box Text box (hộp soạn thảo) dùng để nhập dữ liệu từ người dùng hay hiển thị dữ liệu. Tuy nhiên, không nên dùng Textbox để hiển thị dữ liệu không được thay đổi bởi người dùng nếu như không đặt thuộc tính Locked là True. Văn bản thực sự hiển thị được lưu trong thuộc tính Text. Chúng ta có thể đặt văn bản vào textbox hay đọc nội dung qua thuộc tính Text này. Các thuộc tính MultiLine, ScrollBars và WordWrap giúp hiển thị văn bản trong Textbox khi có nhiều dòng. Private Sub Form_Load () Text1.Text = "Here are two lines" _ & vbCrLf & "in a text box" End Sub Trong thủ tục trên, vbCrLf là hằng số khiến chuỗi chia thành 2 dòng. Chú ý: để WordWrap có hiệu lực, Multiple cũng cần có hiệu lực. Các thuộc tính SelStart, SelLength và SelText giúp điều khiển việc lựa chọn 1 phần văn bản hộp textbox. Check box Check box (hộp đánh dấu) được dùng để đưa ra lựa chọn đúng/sai, có/không cho người sử dụng. Chương trình ví dụ về Check box Giao diện chương trình gồm text box, label, command button, và 2 check box. Danh sách đối tượng và thuộc tính đặt như sau: Đối tượng Thuộc tính Giá trị Form Name Caption frmCheck Check Box Example Text box Name Text txtDisplay Some sample text Check box 1 Name Caption chkBold &Bold Check box 2 Name Caption chkItalic &Italic Command button Name Caption cmdClose &Close Mã lệnh các thủ tục sự kiện: 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. txtDisplay.Font.Italic = False End If End Sub Khi chạy chương trình, nếu ô chữ nghiêng được chọn thì kiểu chữ trong hộp textbox sẽ là chữ nghiêng, còn nếu không, kiểu chữ sẽ là không nghiêng. Tương tự với ô chữ đậm. Private Sub CmdClose_Click() End End Sub Option Button và nhóm Option Button Option button (nút tuỳ chọn) được dùng theo nhóm được cho phép người dùng chọn 1 trong số nhiều lựa chọn. Tạo nhóm Option Button Tất các option button được đặt trực tiếp lên form tạo thành 1 nhóm. Nếu muốn tạo thêm các nhóm, những option button thuộc nhóm mới phải được cùng đặt trong 1 frame box hay picture box. Người dùng chỉ có thể chọn 1 tuỳ chọn trong mỗi nhóm. Nhóm các control trong 1 frame Chọn frame control trên toolbox và vẽ lên form. Chọn option button control trên toolbox vẽ vào trong frame. Làm lại bước 2 cho mỗi option button cần đặt trong frame. Nếu chúng ta đã có sẵn các control muốn nhóm gộp vào trong 1 frame, hãy chọn các control đó rồi cắt và dán chúng vào trong frame hay picture control. Đối tượng chứa các control Tuy mỗi control và 1 đối tượng độc lập, quan hệ cha-con tồn tại giữa form và control. Ví dụ: các option button được chứa trong 1 frame, và frame này được chứa trong 1 form Thực sự, mỗi khi vẽ 1 control lên form, mỗi control thường chứa 1 thuộc tính Parent chỉ tới form mà control được đặt trên. Các thuộc tính Left và Top chẳng hạn sẽ xác định vị trí tương đối của control trong form cha. Chương trình ví dụ về Options Xây dựng chương trình với giao diện: Bảng các đối tượng và thuộc tính: Đối tượng Thuộc tính Giá trị Label Name Caption LblDisplay (Empty) Command button Name Caption CmdClose &Close Option button 1 Name Caption opt486 &486 Option button 2 Name Caption Value opt586 &Pentium True Option button 3 Name Caption opt686 P&entium Pro Frame Name Caption fraSystem &Operating System Option button 4 Name Caption optWin95 Windows 95 Option button 5 Name Caption Value optWinNT Windows NT True Các thủ tục sự kiện: Private Sub opt586_Click() strComputer = "Pentium" Call DisplayCaption End Sub Sub DisplayCaption() lblDisplay.Caption = "You selected a " & _ strComputer & " running " & strSystem End Sub List box và Combo box Listbox (hộp danh sách) và combo box (hộp kéo thả) sử dụng để liệt kê các lựa chọn cho người dùng. Listbox và combox, khác với text box, chứa nhiều giá trị. Hai control này có sẵn các phương thức để thêm, bớt, lấy giá trị từ chúng. Đoạn lệnh sau thêm 3 giá trị và 1 list box: lstCity.AddItem "Paris" lstCity.AddItem "New York" lstCity.AddItem "San Francisco" Các control khác Picture Box Control: Hiển thị kết quả của chương trình, ngoài ra còn hiển thị hình ảnh qua thuộc tính Picture chứa tên tệp ảnh và đường dẫn. picMain.Picture = LoadPicture("VANGOGH.BMP") Picture box cũng được dùng như đối tượng chứa các control khác Lightweight Graphical Control: Các control image, shape và line được gọi là các lightweight controls; chúng hỗ trợ 1 tập các các propertie, method, và events của picture box. Do đó, chúng cần ít tài nguyên máy tính và sẽ được nạp nhanh hơn picture box. Chương trình ví dụ sử dụng Image control Tạo chương trình với giao diện sau (xem Images.frm trong Controls.vbp tại thư mục Samples). Các đối tượng truy nhập CSDL (Data Access Control) ADO Data control DataList control DataCombo control DataGrid Microsoft FlexGrid control, Hierarchical FlexGrid control Các đối tượng Hệ thống tệp (File System Control) DriveListBox control DirListBox control FileListBox control Các đối tượng không phân loại (Miscellaneous Control) Timer control OLE container control Common dialog control Focus Focus là khả năng được nhận input của người dùng từ chuột hoặc bàn phím. Trong giao diện Microsoft Windows, vài ứng dụng có thể cùng chạy trong cùng thời điểm, nhưng chỉ ứng dụng có focus sẽ có title bar ở trạng thái hoạt động và có thể nhận input của người dùng. Trên một form Visual Basic với một số text box, chỉ text box có focus hiện văn bản gõ vào từ bàn phím. Các sự kiện GotFocus và LostFocus xảy ra khi một đối tượng nhận hoặc mất focus. Form và hầu hết các control hỗ trợ các sự kiện này. Sự kiện Mô tả GotFocus Xảy ra khi một đối tượng nhận focus. LostFocus Xảy ra khi một đối tượng mất focus. Một thủ tục cho sự kiện LostFocus thường được dùng để thẩm định và kiểm định các cập nhật, hoặc để đảo/đổi điều kiện ta đặt trong thủ tục GotFocus của đối tượng. Ta có thể gán focus cho 1 đối tượng bằng cách: Chọn đối tượng trong khi chạy. Sử dụng một access key (ví dụ: tab) để chọn đối tượng trong khi chạy. Sử dụng phương thức SetFocus trong mã chương trình. Một đối tượng chỉ có thể nhận focus khi các thuộc tính Enabled và Visible của nó có giá trị True. Thuộc tính Enabled cho phép đối tượng hưởng ứng các sự kiện do người dùng gây ra (bằng chuột hoặc bàn phím). Thuộc tính Visible quyết định xem đối tượng có được hiện trên màn hình hay không. Lưu ý   Một form chỉ có thể nhận focus nếu nó không chứa control có thể nhận focus. Sự kiện Validate của các control Sự kiện Validate (kiểm tra) của control cũng xảy ra trước khi nó mất focus. Tuy nhiên, sự kiện này chỉ có thể xảy ra nếu thuộc tính CausesValidation của control nhận focus có giá trị True. Trong nhiều trường hợp, do sự kiện Validate xảy ra trước khi mất focus, dùng sự kiện này cho việc thẩm định dữ liệu thích hợp hơn LostFocus. Control không thể nhận focus Một số control, chẳng hạn lightweight control, không thể nhận focus. Các lightweight control bao gồm: Frame control Image control Label control Line control Shape control Thêm vào đó là các control không hiện ra khi chạy, chẳng hạn Timer control, cũng không thể nhận focus. Đặt Tab Order Tab order (thứ tự Tab) là thứ tự mà người dùng di chuyển từ control này sang control khác bằng cách nhấn phím TAB. Mỗi form có một tab order của riêng nó. Thông thường, tab order là thứ tự ta tạo các control. Để thay đổi tab order cho một control, đặt thuộc tính TabIndex. Thuộc tính TabIndex của một control quyết định vị trí của nó trong tab order. Mặc định, control đầu tiên được vẽ có TabIndex bằng 0, cái thư hai có TabIndex bằng 1, ... Control TabIndex trước khi sửa TabIndex sau khi sửa Text1 0 1 Text2 1 2 Command1 2 0 Chú ý: Control không thể nhận focus, hoặc bị disabled hay được đặt trạng thái không hiện, không có thuộc tính TabIndex property và không có trong tab order. Khi người dùng nhấn phím TAB key, các control này bị bỏ qua. Bỏ một control ra khỏi Tab Order Ta có thể bỏ một control ra khỏi tab order bằng cách đặt thuộc tính TabStop bằng False (0). Một control có thuộc tính TabStop bằng False giữ nguyên vị trí trong tab order. Chú ý: Một nhóm các option button có một tabstop duy nhất. Nút được chọn (button có Value bằng True) có TabStop được tự động gán bằng True, trong khi đó, các nút khác có TabStop bằng False. Dialog Box Dialog box dùng để hỏi người dùng dữ liệu cần thiết hoặc dùng để hiện thông tin cho người dùng. Dialog box là một kiểu đối tượng form đặc biệt mà có thể tạo theo 3 cách: Predefined dialog box có thể được tạo từ mã chương trình sử dụng các hàm MsgBox, InputBox. Customized dialog box có thể được tạo từ form chuẩn hoặc sửa một dialog box sẵn có. Standard dialog box, chẳng hạn Print và File Open, có thể được tạo từ common dialog control. Khái niệm cơ sở về lập trình Cơ bản về chương trình hướng sự kiện Các module mã lệnh trong Visual Basic Sử dụng Code Editor Qui ước viết lệnh Biến số và hằng số Kiểu dữ liệu Mảng Hàm và thủ tục Cấu trúc điều khiển Cơ bản về chương trình hướng sự kiện Một sự kiện là 1 hành động nhận biết được bởi form và control. Chương trình hướng-sự kiện gọi đoạn mã lệnh Basic để đáp ứng 1 sự kiện. Mỗi form và control trong Visual Basic có 1 tập xác định trước các sự kiện. Nếu một trong số những sự kiện đó xảy đến và có mã lệnh gắn với thủ tục sự kiện, Visual Basic sẽ gọi đoạn lệnh đó. Mặc dù đối tượng trong Visual Basic tự động nhận ra tập định nghĩa trước các sự kiện, lập trình viên mới là người quyết định các đối tượng có đáp ứng hay không và đáp ứng thế nào với 1 sự kiện cụ thể. Mỗi sự kiện có 1 phần mã lệnh tương ứng với nó dưới dạng 1 thủ tục đáp ứng sự kiện. Để điều khiển các 1 đối tượng đáp ứng 1 sự kiện, chúng ta cần viết mã lệnh với thủ tục sự kiện tương ứng. Trình tự hoạt động của 1 chương trình hướng-sự kiện thường như sau: Chương trình khởi động, form được nạp và hiển thị. Form hay control trên form nhận được 1 sự kiện tác động. Sự kiện đó có thể gây ra bởi người dùng (nhấn 1 phím), bởi hệ thống (1 sự kiện gây ra bởi bộ định giờ timer), hay trực tiếp bởi mã lệnh của ta. Nếu có phần mã lệnh tương ứng với thủ tục sự kiện, nó sẽ được gọi. Chương trình chờ cho sự kiện kế tiếp. Chú ý:   Nhiều sự kiện xảy ra liên quan tới những sự kiện khác. Ví dụ, khi sự kiện DblClick xảy ra, sự kiện MouseDown, MouseUp, và Click cũng xảy ra. Các module mã lệnh trong Visual Basic Mã lệnh trong Visual Basic được lưu trong các module. Có 3 loại module: form, standard, và class. Chương trình đơn giản chỉ gồm 1 form và tất cả mã lệnh của chương trình nằm trong module form. Khi chương trình phức tạp thêm, lớn hơn, sự có nhiều form hơn. Sẽ có phần mã lệnh có thể dùng chung giữa các form. Để tránh trùng lặp, chúng có thể được đưa vào module tách riêng các form – gọi là module standard. Dần dần, chúng ta có thể sẽ xây dựng 1 thư viện các module chứa các thủ tục dùng chung. Mỗi module standard, class và form có thể chứa: Phần khai báo – Declarations: Chứa khai báo Hằng số, kiểu, biến hay thư viện kết nối động (dynamic-link library – DLL). Phần các thủ tục – Procedures: Chứa thủ tục, hàm số, thủ tục thuộc tính có thể được gọi trong mỗi module. Module Form Module form (trong các tệp *.FRM) chứa chứa các thủ tục đáp ứng sự kiện trên form, các thủ tục dùng chung trong form, các khai báo ở mức form về: biến, hằng, kiểu, thủ tục bên ngoài. Mã lệnh trong mỗi form được dùng riêng trong form đó và đôi khi mã lệnh trong 1 form có thể tham chiếu tới các form khác. Module Standard Module standard (trong các tệp *.BAS) chứa thủ tục và khai báo truy nhập được bởi các module khác trong chương trình, hay thậm chí bởi các chương trình khác nhau. Module Class Modules class (trong các tệp *.CLS) là cơ sở lập trình hướng đối tượng trong Visual Basic. Chúng ta viết mã lệnh trong module class để tạo những đối tượng mới với những thuộc tính và phương thức riêng. Thực ra, form chính là các module class, nơi có thể đặt các control và hiển thị các cửa sổ form. Chú ý:   ActiveX Documents, ActiveX Designers, và User Controls: là những loại module mở rộng (với tên tệp có phần mở rộng khác). Có thể xem những module đó tương tự như module form. Sử dụng Code Editor Code Editor của Visual Basic là một cửa sổ nơi ta viết phần lớn mã chương trình. Nó giống một trình soạn thảo được chuyên hoá cao với nhiều tính năng tạo thuận lợi cho việc viết mã Visual Basic. Một cửa sổ riêng được mở cho mỗi module ta chọn từ Project Explorer. Mã nằm trong mỗi module được chia thành các phần riêng cho từng đối tượng trong module. Mỗi module form gồm: Phần general: chứa phần khai báo và các thủ tục dùng chung. Phần thủ tục sự kiện cho từng đối tượng. Để truy nhập tới phần mã lệnh cần viết, nên sử dụng hộp combo box trái rồi hộp combo box phải. Visual Basic có chức năng Auto Code Completion giúp viết mã lệnh trong Code Editor được dễ dàng. Để chọn phần từ nào đó, chuyển thanh sáng tới đó, rồi nhấn TAB. Ngoài ra, chức năng Bookmarks giúp đánh dấu 1 vị trí mã lệnh để có thể quay lại được nhanh chóng (Edit | Bookmarks). Qui ước viết lệnh trong Visual Basic Chia 1 lệnh thành nhiều dòng Bằng cách sử dụng ký tự: [ _ ] dtaTilesOfPublishers.RecordSource = _ "SELECT * FROM Titles, Publishers" _ & "WHERE Publishers.PubId = Titles.PubID" _ & "AND Publishers.State = 'CA'" Trong một số trường hợp cách chia 1 câu lệnh này không thực hiện được: nối các dòng chú giải, ... Nối nhiều lệnh vào 1 dòng Bằng cách sử dụng kí tự: [ : ] txtMsg.Text = "Hello" : Red = 255 : txtMsg.BackColor = _ Red Thêm chú giải vào mã lệnh Bằng cách sử dụng kí tự: [ ‘ ] ' This is a comment beginning at the left edge of the ' screen. txtMsg.Text = "Hi!" ' Place friendly greeting in ' text box. Hệ thống số Cơ số 10 (Decimal) Cơ số 8 (Octal) Cơ số 16 (Hexadecimal ) 9 &O11 &H9 15 &O17 &HF 16 &O20 &H10 20 &O24 &H14 255 &O377 &HFF Qui tắc đặt tên Tên thủ tục, hàm, biến, hằng phải tuân theo qui tắc: Bắt đầu bằng kí tự chữ Không chứa ký tự phân cách (như [ . ] hay kí tự rỗng), ký tự khai báo kiểu. Không dài hơn 255 kí tự. Tên của control, forms, class, và module không vượt quá 40 kí tự. Không trùng với các từ khoá của ngôn ngữ. Biến số Biến số là nơi lưu trữ tạm thời giá trị. Biến thường được định nghĩa bởi người sử dụng. Chúng ta có thể xem các thuộc tính của 1 đối tượng như biến. ApplesSold = 10 ApplesSold = ApplesSold + 1 txtSales.txt = ApplePrice * ApplesSold Khai báo biến Dim variablename [As type] Biến khai báo với Dim trong 1 thủ tục tồn tại khi thủ tục đó được chạy; Khi thủ tục kết thúc, giá trị của biến đó được giải phóng; Tức biến này có phạm vi địa phương (local) trong thủ tục mà nó được khai báo. Phạm vi cơ bản của biến: Biến khai báo trong phần Declarations của 1 module form, standard, hay class, chứ không phải bên trong 1 thủ tụccó thể được sử dụng bởi mọi thủ tục trong module. Biến khai báo với từ khoá Public sử dụng được trong toàn chương trình. Biến khai báo với từ khoá Static vẫn lưu tiếp giá trị của nó ngay cả khi thủ tục chứa khai báo của nó đã kết thúc. Chú ý: Trong 1 phạm vi, không được có 2 biến khai báo trùng tên. Khai báo không tường minh Trong Visual Basic, biến có thể không khai báo trước khi sử dụng: Function SafeSqr(num) TempVal = Abs(num) SafeSqr = Sqr(TempVal) End Function Tuy nhiên, điều này dễ dẫn sinh lỗi trong chương trình: Function SafeSqr(num) TempVal = Abs(num) SafeSqr = Sqr(TemVal) End Function Khai báo tường minh Nên luôn khai báo biến trước khi sử dụng. Để yêu cầu Visual Basic luôn kiểm tra biến phải được khai báo trước khi sử dụng: Đặt câu lệnh sau vào phần Declarations của 1 module class, form, hay standard: Option Explicit Hay từ menu Tools, chọn Options, nhấn chọn tab Editor rồi đánh dấu chọn Require Variable Declaration. Sau đó, câu lệnh Option Explicit sẽ luôn được chèn tự động. Hằng số Có 2 kiểu hằng số Hằng số cơ sở hay định nghĩa trước bởi hệ thống Hằng số do người dùng định nghĩa Tự khai báo 1 hằng số: [Public|Private] Const constantname [As type] = expression Ví dụ: Const conPi = 3.14159265358979 Public Const conMaxPlanets As Integer = 9 Const conReleaseDate = #1/1/95# Phạm vi hằng số do người dùng định nghĩa Hằng khai báo trong 1 thủ tục có phạm vi chỉ trong thủ tục đó Hằng khai báo trong phần Declarations của 1 module có phạm vi trong toàn module. Hằng khai báo trong phần Declarations của 1 module với từ khoá Public có phạm vi trong toàn chương trình. Kiểu dữ liệu Khai báo biến với kiểu dữ liệu Biến thường được khai báo trước với kiểu dữ liệu định sẵnVí dụ: Private I As Integer Dim Amt As Double Static YourName As String Public BillsPaid As Currency Private I As Integer, Amt As Double Nếu kiểu biến không nêu rõ, biến sẽ có kiểu là Variant. Private v Dữ liệu kiểu số Integer Long Single Double Currency Kiểu Byte Byte Khi biến số chứa dữ liệu nhị phân, nên khai báo nó thành mảng các dữ liệu kiểu byte. Điều đó giúp giữ được khuôn dạng dữ liệu trong quá trình chuyển đổi. Kiểu dữ liệu chuỗi String Ví dụ: Dim S as String S = "Database" S = Left(S, 4) Mặc định, biến chuỗi có độ dài biến đổi phù hợp với giá trị nó lưu trữ. Để khai báo 1 biến chuỗi có độ dài cố định, sử dụng cú pháp: String * size Ví dụ: Dim EmpName As String * 50 Nếu biến EmpName được gán bằng 1 chuỗi ít hơn 50 kí tự, nó sẽ được chèn vào các kí tự trắng cho đủ 50. Còn nếu biến EmpName được gán bằng 1 chuỗi nhiều hơn 50 kí tự, Visual Basic sẽ cắt ngắn lại. Do chuỗi có độ dài cố định có thể được chèn thêm các kí tự trắng, chúng ta có thể cần tới các hàm Trim, RTrim để loại bỏ các kí tự trắng. Chuỗi có độ dài cố định có thể được khai báo Public hay Private trong module standard. Trong module form hay module class, chuỗi có độ dài cố định chỉ có thể được khai báo Private. Trao đổi giữa chuỗi và số Visual Basic có thể tự động chuyển đổi dữ liệu giữa kiểu số và chuỗi. Ví dụ: Private Sub Command1_Click() Dim intX As Integer Dim strY As String strY = "100.23" intX = strY ' Passes the string to a numeric ' variable. lstNum.AddItem Cos(strY) ' Adds cosine of number in ' the string to the listbox. strY = Cos(strY) ' Passes cosine to the ' string variable. txtStr.Text = strY ' String variable prints in ' the text box. End Sub Tuy nhiên, chúng ta phải luôn cẩn thận, bởi khi trao đổi giữa chuỗi và số, lỗi có thể nảy sinh khi chuỗi số chứa giá trị không ở khuôn dạng số. Kiểu dữ liệu logic Boolean True/False Kiểu dữ liệu thời gian Giá trị về ngày tháng, hay thời gian có thể được lưu trữ trong kiểu dữ liệu Date hay trong Variant. Kiểu dữ liệu đối tượng Biến đối tượng được lưu trữ thành địa chỉ 32-bit. Địa chỉ này tham trỏ tới đối tượng trong chương trình, hay tới đối tượng trong chương trình khác. Dim objDb As Object Set objDb = OpenDatabase("c:\Vb5\Biblio.mdb") Kiểu dữ liệu Variant Biến kiểu Variant có thể lưu trữ dữ liệu có kiểu bất kỳ. Chúng ta không phải chuyển đổi giữa các kiểu dữ liệu nếu chúng ta gán chúng cho 1 biến kiểu Variant. Kiểu dữ liệu do người dùng tự định nghĩa Chúng ta có thể định nghĩa những kiểu dữ liệu mới, tương tự như khái niệm Record trong Pascal. Mảng Trong Visual Basic, có 2 kiểu mảng: mảng tĩnh với kích thước cố định và mảng động với kích thước có thể thay đổi khi chạy. Khai báo mảng tĩnh Dim Counters(14) As Integer Public Sums(20) As Double Khi đó, mảng Counters có 15 phần tử với chỉ số từ 0 tới 15, mảng Sums có 21 phần từ 0 tới 20 Để chỉ rõ phạm vi chỉ số, có thể khai báo: Dim Counters(1 To 15) As Integer Dim Sums(100 To 120) As String Mảng chứa các mảng Có thể tạo mảng các Variant, và sau đó gán giá trị cho nó với mảng của các kiểu dữ liệu khác. Ví dụ tạo 2 mảng, một chứa các số nguyên và một chứa các chuỗi. Sau đó khai báo mảng thứ 3 chứa các Variant và gán giá trị với nó từ mảng số nguyên và mảng chuỗi. Private Sub Command1_Click() Dim intX As Integer ' Declare counter variable. ' Declare and populate an integer array. Dim countersA(5) As Integer For intX = 0 To 4 countersA(intX) = 5 Next intX ' Declare and populate a string array. Dim countersB(5) As String For intX = 0 To 4 countersB(intX) = "hello" Next intX Dim arrX(2) As Variant ' Declare a new two-member ' array. arrX(1) = countersA() ' Populate the array with ' other arrays. arrX(2) = countersB() MsgBox arrX(1)(2) ' Display a member of each ' array. MsgBox arrX(2)(3) End Sub Mảng nhiều chiều Với Visual Basic, chúng ta có thể khai báo các mảng nhiều chiều: Static MatrixA(9, 9) As Double Dim MultiD(3, 1 To 10, 1 To 15) Hàm và thủ tục Phân chia chương trình thành hàm và thủ tục có 2 lợi ích chính: Chia chương trình thành các khối logic tách rời, mỗi khối dễ dàng được viết và gỗi lỗi hơn nếu viết cả chương trình lớn. Một hàm/thủ tục có thể được sử dụng nhiều lần. Trong Visual Basic có một số kiểu hàm/thủ tục sau: Thủ tục không trả về giá trị: thủ tục chung và thủ tục sự kiện. Hàm có trả về giá trị. Thủ tục thuộc tính có thể trả về và gán giá, và gán tham chiếu tới các đối tượng. Khai báo hàm và thủ tục Cú pháp khai báo 1 thủ tục: [Private|Public][Static]Sub procedurename (arguments) statements End Sub Cú pháp khai báo 1 hàm: [Private|Public][Static]Function procedurename (arguments) [As type] statements End Function Tạo 1 hàm/thủ tục chung: Gõ vào phần đầu hàm/thủ tục vào cửa sổ Code, với dạng sau Sub UpdateForm () Function GetCoord () Visual Basic sẽ hoàn tất thủ tục theo khuôn mẫu Gọi 1 thủ tục Có 2 cách như sau: ' Both of these statements call a Sub named MyProc. Call MyProc (FirstArgument, SecondArgument) MyProc FirstArgument, SecondArgument Gọi 1 hàm ' All of the following statements would call a function ' named ToDec. Print 10 * ToDec X = ToDec If ToDec = 10 Then Debug.Print "Out of Range" X = AnotherFunction(10 * ToDec) Chúng ta cũng có thể gọi 1 hàm như cách chúng ta gọi 1 thủ tục: Call Year(Now) Year Now Khi đó, Visual Basic sẽ in ra giá trị trả về từ hàm Year. Gọi hàm/thủ tục từ module khác trong module form Call Form1.SomeSub(arguments) trong module class Dim DemoClass as New Class1 DemoClass.SomeSub trong module standard Module2.CommonName(arguments) Truyền tham số cho hàm/thủ tục: Function WhatsForLunch(WeekDay As String, Hour _ As Integer) As String ' Returns a lunch menu based on the day and time. If WeekDay = "Friday" then WhatsForLunch = "Fish" Else WhatsForLunch = "Chicken" End If If Hour > 4 Then WhatsForLunch = "Too late" End Function Cấu trúc điều khiển Cấu trúc phân nhánh If...Then If...Then...Else Select Case If...Then If condition Then statement If condition Then statements End If If...Then...Else If condition1 Then [statementblock-1] [ElseIf condition2 Then [statementblock-2]] ... [Else [statementblock-n]] End If Select Case Select Case testexpression [Case expressionlist1 [statementblock-1]] [Case expressionlist2 [statementblock-2]] . . . [Case Else [statementblock-n]] End Select Ví dụ: Private Sub mnuCut_Click (Index As Integer) Select Case Index Case 0 ' Cut command. CopyActiveControl ' Call general procedures. ClearActiveControl Case 1 ' Copy command. CopyActiveControl Case 2 ' Clear command. ClearActiveControl Case 3 ' Paste command. PasteActiveControl Case Else frmFind.Show ' Show Find dialog box. End Select End Sub Cấu trúc lặp Do...Loop For...Next For Each...Next Do...Loop Do While condition ‘ Loop until condition is True statements Loop Do statements Loop While condition ‘ Loop until condition is True Ví dụ: Function CountStrings (longstring, target) Dim position, count position = 1 Do While InStr(position, longstring, target) position = InStr(position, longstring, target)_ + 1 count = count + 1 Loop CountStrings = count End Function Hai biến dạng khác của lặp với số bước không định trước, chỉ khác là quá trình lặp tiếp tục khi điều kiện là False: Lặp 0 hay nhiều lần Lặp ít nhất 1 lần Do Until condition   statements Loop Do   statements Loop Until condition For...Next For counter = start To end [Step increment] statements Next [counter] Ví dụ: Private Sub Form_Click () Dim I As Integer For i = 0 To Screen.FontCount Print Screen.Fonts(i) Next End Sub Sub HighlightButton(MyControl As Variant) Dim i As Integer For i = 0 To frmVCR.Controls.Count - 1 If TypeOf frmVCR.Controls(i) Is Shape Then If frmVCR.Controls(i).Name = MyControl Then frmVCR.Controls(i).Visible = True Else frmVCR.Controls(i).Visible = False End If End If Next End Sub For Each...Next Tương tự như For ... Next, nhưng nó duyệt qua các phần tử trong 1 object collection hay trong 1 mảng, chứ không phải duyệt theo số lần đếm định trước. Điều đó có ích khi chúng ta không biết trước số phần tử trong nhóm cần duyệt. For Each element In group statements Next element Ví dụ: Sub ListTableDefs() Dim objDb As Database Dim MyTableDef as TableDef Set objDb = OpenDatabase("c:\vb\biblio.mdb", _ True, False) For Each MyTableDef In objDb.TableDefs() List1.AddItem MyTableDef.Name Next MyTableDef End Sub Chú ý rằng khi sử dụng For Each...Next: Với collection, phần tử (element) chỉ có thể là: biến Variant, biến Object, hay 1 object được liệt kê trong Object Browser. Với mảng, phần tử (element) chỉ có thể là biến Variant. Không được sử dụng For Each...Next với mảng các phần tử có kiểu dữ liệu do người dùng tự định nghĩa bởi 1 biến Variant không thể chữa dữ liệu có kiểu này. Làm việc với cấu trúc điều khiển Các cấu trúc lồng nhau Ví dụ: Private Sub Form_Click() Dim SFont, PFont For Each SFont In Screen.Fonts() For Each PFont In Printer.Fonts() If SFont = PFont Then Print SFont End If Next PFont Next SFont End Sub Thoát khỏi 1 cấu trúc điều khiển lặp Bằng cách sử dụng câu lệnh Exit: Exit For giúp thoát khỏi vòng lặp For Next, và Exit Do giúp thoát khỏi vòng lặp Do While. For counter = start To end [Step increment] [statementblock] [Exit For] [statementblock] Next [counter[, counter] [,...]] Do [{While | Until} condition] [statementblock] [Exit Do] [statementblock] Loop Ví dụ: Private Sub Form_Click() Dim SFont, PFont For Each SFont In Screen.Fonts() For Each PFont In Printer.Fonts() If SFont = PFont Then Print Sfont Exit For ' Exit inner loop. End If Next PFont Next SFont End Sub Thoát khỏi hàm/thủ tục Bằng câu lệnh: Exit Sub và Exit Function. Ví dụ: Private Sub Form_Click() Dim SFont, PFont For Each SFont In Screen.Fonts() For Each PFont In Printer.Fonts() If SFont = PFont Then Print Sfont Exit Sub ' Exit the procedure. End If Next PFont Next SFont End Sub Khái niệm cơ sở về lập trình (tiếp) Qui ước về cách đặt tên biến Phạm vi của biến Một số vấn đề khi sử dụng biến và hằng Chuyển đổi kiểu dữ liệu Kiểu dữ liệu Variant Mảng động Truyền tham số cho hàm và thủ tục Sử dụng biến Object Qui ước về cách đặt tên biến Tên của 1 control là 1 trong những thuộc tính quan trọng nhất của nó. Để đặt tên có hệ thống, dễ nhớ, tránh nhầm lẫn. Trong Visual Basic, người ta thường sử dụng 3 kí tự đầu để phân loại tên đối tượng. Loại Control Tiền tố Loại Control Tiền tố Label lbl PictureBox pic Frame fra TextBox txt CheckBox chk CommandButton cmd ComboBox cbo OptionButton opt HscrollBar hsb ListBox lst Timer tmr VscrollBar vsb DirListBox dir DriveListBox drv Shape shp FileListBox fil Image img Line lin OLE Container Control ole Data dat Ví dụ: cmdClose chỉ là tên của 1 command button để đóng 1 form; txtFirstName là tên 1 text box chứa tên gọi. Bảng sau nêu phần tiền tố thường sử dụng cho cả control cũng như các kiểu biến: Tiền tố Biến/Control Ví dụ b Boolean bLightsOn c Currency cAmountDue d Double dDollarPerGallon db Database dbAccountsPayable ds Dynaset dsOverDue dt Date+time dtDateDue Prefix Variable/Control Example td TableDef tdEmployees h Handle hWnd i Integer iCounter l Long lNum str String strMessage s Single sPay a Array a_iMyArray g Global g_iTotal m Local to module or form m_iAmount ani Animation button aniMain cbo Combo box and drop-down list box cboMyList chk Check box chkDoctorIn clp Picture clip clpEmblems cmd Command button cmdFirstName com Communications comLineOne ctr Control (used within procs when the specific type is unknown) ctrNext dat Data datEmployees db ODBC database dbTaxpayers dir Directory list box dirProjects dlg Common dialog dlgSettings drv Drive list box drvMain fil File list box filPictures frm Form frmMain fra Frame fraTeams gau Gauge gauGas Prefix Variable/Control Example gpb Group button gpbApps grd Grid grdMain hsb Horizontal scroll bar hsbText img Image imgMain key Keyboard key status keyASCII lbl Label lblLastName lin Line linRed lst List box lstStooges mdi MDI child form mdiMain mnu Menu mnuEdit opt Option button optGender ole OLE client oleMain pnl 3D panel pnlFriends shp Shape shpCircle spn Spin control spnTemp txt Text/edit box txtAddress tmr Timer tmrBreak vsb Vertical scrollbar vsbComments Phạm vi của biến Phạm vi của một biến số xác định trong phần nào của mã lệnh biến số thì biến số đó tồn tại. Khi chúng ta khai báo 1 biến trong 1 thủ tục, chỉ có phần lệnh trong thủ tục đó có thể truy nhập hay thay đổi giá trị của biến số đó; biến số có phạm vi địa phương (local) đối với thủ tục. Nhiều khi chúng ta muốn sử dụng 1 biến với phạm vi rộng hơn như những biến mà giá trị của nó có thể sử dụng được trong toàn bộ các thủ tục trong 1 module, hay thậm chí từ cả những module khác trong toàn chương trình. Visual Basic cho phép chúng ta định nghĩa các phạm vi biến khác nhau như vậy. Tuỳ thuộc và cách khai báo, 1 biến có phạm vi địa phương hay ở mức module. Phạm vi Private Public Trong thủ tục/hàm Biến chỉ được sử dụng địa phương trong thủ tục/hàm khai báo nó. Không được khai báo biến public (công cộng). Trong module (khai báo tại Delaration) Biến được sử dụng địa phương trong module: tại tất các hàm thủ tục/hàm trong module. Biến có thể được sử dụng bởi tất cả các module. Biến sử dụng trong 1 hàm/thủ tục Để khai báo biến địa phương trong hàm/thủ tục, chúng ta có thể sử dụng: Ví dụ: Dim intTemp As Integer hay Static intPermanent As Integer Biến khai báo với Static tồn tại trong suốt chương trình chạy, duy trì giá trị giữa những lần hàm/thủ tục chạy; còn biến khai báo Dim thì chỉ tồn tại trong mỗi lần hàm/thủ tục chạy mà thôi. Biến sử dụng trong phạm vi 1 module Biến khai báo với từ khoá Private tại phần Declarations của 1 module có phạm vi trong toàn module đó; tức sử dụng được trong tất các hàm/thủ tục thuộc module. Ví dụ: Private intTemp As Integer hay Dim intTemp As Integer Khai báo Private hay Dim ở mức module là tương tự nhau, tuy nhiên, nên khai báo với từ khoá Private Biến sử dụng trong tất cả các module Là biến khai báo với từ khoá Public tại phần Declarations của 1 module. Nó có thể được sử dụng tại tất cả các module trong chương trình. Ví dụ: Public intTemp As Integer Một số vấn đề khi sử dụng biến và hằng Nhiều biến với cùng 1 tên Nếu có các biến công cộng trong các module khác nhau có cùng tên, để chỉ phân biệt rõ chúng trong mã lệnh, chúng ta cần nêu rõ tên của module chứa biến cùng tên biến. Nếu 2 biến công cộng kiểu Integer tên intX khai báo trong cả Form1 và Module1, chúng ta có thể chỉ rõ biến theo cách Module1.intX và Form1.intX. Ví dụ: tạo 1 project với:2 module standard, 1 form với 2 command button. Biến intX được khai báo trong module standard đầu tiên: Module1. Module1 có thủ tục Test. Public intX As Integer ' Declare Module1's intX. Sub Test() ' Set the value for the intX variable in Module1. intX = 1 End Sub Biến intX khác được khai báo trong module standard thứ hai: Module2. Module2 cũng có thủ tục tên Test. Public intX As Integer ' Declare Module2's intX. Sub Test() ' Set the value for the intX variable in Module2. intX = 2 End Sub Biến intX thứ 3 được khai báo trong form: form1. Module mã lệnh của form1 cũng có thủ tục tên Test. Public intX As Integer ' Declare the form's intX ' variable. Sub Test() ' Set the value for the intX variable in the form. intX = 3 End Sub Ba command button trên form1 tương ứng gọi 3 thủ tục Test và sử dụng MsgBox để hiển thị giá trị của 3 biến. Private Sub Command1_Click() Module1.Test ' Calls Test in Module1. MsgBox Module1.intX ' Displays Module1's intX. End Sub Private Sub Command2_Click() Module2.Test ' Calls Test in Module2. MsgBox Module2.intX ' Displays Module2's intX. End Sub Private Sub Command3_Click() Test ' Calls Test in Form1. MsgBox intX ' Displays Form1's intX. End Sub Chạy chương trình, nhấn vào từng command buttons. Chúng ta sẽ thấy việc gọi tới 3 biến khác nhau trong 3 module. Chú ý rằng, với nút lệnh thứ 3, chúng ta không chỉ rõ tên module chứa khai báo biến. Biến công cộng và biến địa phương Chúng ta có thể có biến cùng tên nhưng ở các phạm vi khác nhau. Ví dụ: 1 biến công cộng (public) tên Temp và trong 1 thủ tục có khai báo 1 biến địa phương (local) cũng với tên Temp. Khi đó nếu gọi tới Temp trong thủ tục là sử dụng biến Temp địa phương trong đó, còn khi gọi tới Temp bên ngoài thủ tục, thì biến công cộng Temp sẽ được sử dụng. Public Temp As Integer Sub Test() Dim Temp As Integer Temp = 2 ' Temp has a value of 2. MsgBox Form1.Temp ' Form1.Temp has a value of 1. End Sub Private Sub Form_Load() Temp = 1 ' Set Form1.Temp to 1. End Sub Private Sub Command1_Click() Test End Sub Biến thuộc tính form và control Thuộc tính của form, các controls, hằng và hàm/thủ tụcđược xem như biến trong phạm vi toàn module form. Do đó, không được có thuộc tính form hay control có cùng tên với biến được khai báo trong module form. Trong module form, các biến địa phương có thể cùng tên với các control. Để chỉ rõ là control khi cần đặt hay lấy giá trị của control đó, chúng ta có thể nêu tên của form hay sử dụng từ khoá Me. Private Sub Form_Click () Dim Text1, BackColor ' Assume there is also a control on the form called ' Text1. Text1 = "Variable" ' Variable shadows control. Me.Text1 = "Control" ' Must qualify with Me to get ' control. Text1.Top = 0 ' This causes an error! Me.Text1.Top = 0 ' Must qualify with Me to get ' control. BackColor = 0 ' Variable shadows property. Me.BackColor = 0 ' Must qualify with Me to get ' form property. End Sub Tránh tham chiếu vòng Bởi vì 1 hằng số có thể được định nghĩa từ những hằng số khác, chúng ta cần cẩn thận để tránh xảy ra tham chiếu vòng. Ví dụ: ' In Module 1: Public Const conA = conB * 2 ' Available throughout ' application. ' In Module 2: Public Const conB = conA / 2 ' Available throughout ' application. Khi tham chiếu vòng xảy ra, Visual Basic sẽ sinh lỗi khi chạy chương trình. Để tránh tham chiếu vòng, nên giới hạn việc khai báo các hằng công cộng vào trong 1 module duy nhất. Chuyển đổi kiểu dữ liệu Visual Basic cung cấp 1 số hàm giúp chúng ta chuyển đổi 1 giá trị sang 1 kiểu dữ liệu nhất định. Tên hàm Kiểu dữ liệu đích Cbool Boolean Cbyte Byte Ccur Currency Cdate Date CDbl Double Cint Integer CLng Long CSng Single CStr String Cvar Variant CVErr Error Chú ý:   Kiểu dữ liệu truyền cho hàm chuyển đổi phải phù hợp. Ví dụ, khi chuyển 1 giá trị kiểu Long thành 1 số Integer, giá trị kiểu LongValues passed to a conversion function must be valid for the destination data type or an error occurs. For example, if you attempt to convert a Longđó phải trong miền giá trị của kiểu Integer. Kiểu dữ liệu Variant Một biến kiểu Variant có thể lưu trữ giá trị dữ liệu của tất cả các kiểu biến do hệ thống định nghĩa. Ví dụ: Dim SomeValue ' Variant by default. SomeValue = "17" ' SomeValue contains "17" (a two- ' character string). SomeValue = SomeValue - 15 ' SomeValue now contains ' the numeric value 2. SomeValue = "U" & SomeValue ' SomeValue now contains ' "U2" (a two- character string). Một biến kiểuVariantcũng có thể chứa các giá trị đặc biệt là: Empty, Null. Giá trị Empty Khi 1 biến kiểu Variant được khởi tạo, nó có giá trị Empty; khi 1 biến kiểu String không chứa 1 kí tự nào, nó có giá trị Empty. Chúng ta có thể kiểm tra 1 giá trị có là Empty hay không bằng hàm IsEmpty. If IsEmpty(Z) Then Z = 0 Giá trị Null Biến kiểu Variant có thể chứa 1 giá trị đặc biệt khác là: Null. Null thường được sử dụng trong các ứng dụng cơ sở dữ liệu để chỉ rằng dữ liệu là không xác định hay bị mất. Chúng ta có thể kiểm tra 1 giá trị có là Null hay không bằng hàm IsNull. If IsNull(X) And IsNull(Y) Then Z = Null Else Z = 0 End If Kiểm tra kiểu dữ liệu Do biến kiểu Variant có thể lưu trữ kiểu dữ liệu bất kỳ, nên có thể chúng ta cần xác định chính xác kiểu dữ liệu trước khi sử dụng. Hàm IsNumeric dùng để kiểm tra 1 giá trị có là số hay không. Ví dụ: IsNumeric("$100") ‘return True IsNumeric("1,560.50") ‘return True IsNumeric("DM100") ‘return False IsNumeric("1.560,50") ‘return False Hàm IsDate dùng để kiểm tra 1 giá trị có là ngày tháng hay không. Ví dụ: If IsDate(Text1.Text) Then SomeDate = CDate(Text1.Text) daysleft = DateSerial(Year(SomeDate) + _ 1, 1, 1) - SomeDate Text2.Text = daysleft & " days left in the year." Else MsgBox Text1.Text & " is not a valid date." End If Nói chung, mọi giá trị đều có thể xem là ở dạng chuỗi. Khi chúng ta muốn luôn đảm bảo kết quả là phép nối các chuỗi, bất kể thể hiện giá trị các biến, chúng ta có thể sử dụng phép toán & . Ví dụ: Sub Form_Click () Dim X, Y X = "6" Y = "7" Print X + Y, X & Y X = 6 Print X + Y, X & Y End Sub Kết quả in ra: 67 67 13 67 Mảng động Mảng động (dynamic array) được sử dụng khi chúng ta không biết chính xác độ lớn cần thiết cho 1 mảng, bởi mảng động có thể được thay đổi kích cỡ. Cách tạo 1 mảng động Khai báo mảng nhưng không chỉ rõ kích cỡ Dim DynArray() Đặt rõ hay thay đổi kích cỡ bằng câu lệnh ReDim ReDim DynArray(X + 1) Lệnh ReDim chỉ được xuất hiện trong hàm/thủ tục, chứ không phải như các từ khoá khai báo Dim hay Static. ReDim có thể thay đổi số phần tử, cận trên, cận dưới trong mỗi chiều của mảng, nhưng không thể thay đổi được số chiều của mảng. Bảo tồn giá trị 1 mảng động Khi sử dụng ReDim, toàn bộ giá trị trong mảng sẽ được gán giá trị khởi tạo mới phù hợp với kiểu dữ liệu của mảng. Muốn bảo tồn các giá trị hiện có, sử dụng ReDim cùng với từ khoá Preserve, nhưng lúc này, chỉ cận trên của mảng có thể được phép thay đổi. Ví dụ: ReDim Preserve DynArray(UBound(DynArray) + 1) Truyền tham số cho hàm/thủ tục Truyền tham số bằng giá trị Chỉ truyền một bản sao của biến. Nếu thủ tục thay đổi giá trị, thay đổi đó chỉ ảnh hưởng đến bản sao, không ảnh hưởng đến biến được truyền. Sử dụng từ khoá ByVal. Ví dụ: Sub PostAccounts(ByVal intAcctNum as Integer) . . ' Các lệnh được đặt ở đây. . End Sub Truyền tham số bằng tham chiếu Kiểu truyền này cho phép thủ tục truy nhập trực tiếp đến biến được truyền. Do đó, giá trị của biến có thể bị thay đổi bởi thủ tục mà biến đó được truyền vào. Đây là kiểu truyền biến mặc định trong Visual Basic. Phải truyền tham số là một giá trị thuộc kiểu dữ liệu đã được chỉ rõ cho tham số. Nếu không, ta phải truyền một biểu thức làm tham số. Visual Basic tính giá trị biểu thức và truyền nó theo kiểu dữ liệu được yêu cầu. Cách đơn giản chuyển 1 biến thành 1 biểu thức là đặt nó vào trong 1 cặp ngoặc đơn. Ví dụ, truyền 1 biến integer vào 1 thủ tục yêu cầu 1 tham số kiểu string: Sub CallingProcedure() Dim intX As Integer intX = 12 * 3 Foo(intX) End Sub Sub Foo(Bar As String) MsgBox Bar 'The value of Bar is the string "36". End Sub Sử dụng các tham số tuỳ chọn Chúng ta có thể chỉ ra một số tham số trong 1 thủ tục/hàm là tuỳ chọn (tức là có thể không cần truyền khi gọi) bằng cách sử dụng từ khoá Optional. Chú ý rằng, mọi tham số theo sau từ khoá Optional đều là tuỳ chọn. Ví dụ: Dim strName As String Dim varAddress As Variant Sub ListText(x As String, Optional y As Variant) List1.AddItem x If Not IsMissing(y) Then List1.AddItem y End If End Sub Private Sub Command1_Click() strName = "yourname" ' Second argument is not ' provided. Call ListText(strName) End Sub Đặt giá trị mặc định cho tham số tuỳ chọn Chúng ta có thể đặt giá trị mặc định cho tham số tuỳ chọn. Giá trị đó là giá trị mà tham số sẽ được nhận khi gọi thủ tục nếu nó không được truyền khi thủ tục/hàm chứa nó được gọi. Ví dụ: Sub ListText(x As String, Optional y As _ Integer = 12345) List1.AddItem x List1.AddItem y End Sub Private Sub Command1_Click() strName = "yourname" ' Second argument is not ' provided. Call ListText(strName) ' Adds "yourname" and ' "12345". End Sub Sử dụng số tham với số lượng không định trước Số tham số cho 1 hàm/thủ tục thường được định sẵn khi khai báo nó. Nhưng nếu sử dụng từ khoá ParamArray, chúng ta có thể có khai báo cho phép có được số tham số là tuỳ ý khi gọi. Ví dụ: Dim x As Integer Dim y As Integer Dim intSum As Integer Sub Sum(ParamArray intNums()) For Each x In intNums y = y + x Next x intSum = y End Sub Private Sub Command1_Click() Sum 1, 3, 5, 7, 8 List1.AddItem intSum End Sub Sử dụng biến Object Chúng ta có thể sử dụng biến để tham chiếu tới 1 object (đối tượng). Khi đó chúng ta cần khai báo biến, sau đó gán giá trị cho biến: Dim variable As class Set variable = object Ví dụ về khai báo biến: Dim FormVar As New frmMain ' Declare an object ' variable of type frmMain. Dim anyForm As Form ' Generic form variable. Dim anyText As TextBox ' Can refer to any text box ' (but only a text box). Dim anyControl As Control ' Generic control variable. Ví dụ về gán giá trị cho biến: Dim Bal As TextBox Set Bal = frmAccountDisplay!txtAccountBalance If Bal.Text < 0 Then Bal.BackColor = 0 Bal.ForeColor = 255 End If Mục lục

Các file đính kèm theo tài liệu này:

  • docPhát triển ứng dụng với Visual Basic 6.DOC
Tài liệu liên quan