Bài giảng Hướng dẫn lập trình VB.NET - Chương 10: Sử dụng các MODULE (đơn thể) và thủ tục (PROCEDURE) - Phạm Đức Lập

Nội dung thảo luận:

- Tạo các module chuẩn

- Khai báo và sử dụng các biến Public toàn cục

- Tạo các hàm và thủ tục tự định nghĩa bởi người dùng

- Gọi thực thi hàm và thủ tục do người dùng cài đặt

Module là nơi chứa các biến, các hàm, thủ tục và có thể triệu gọi từ bất cứ nơi nào trong

chương trình.

1. Làm việc với MODULE chuẩn

Khi dự án của bạn rất lớn thì việc có nhiều form là điều đương nhiên. Có điều bạn không

thể sử dụng những hàm, biến khai báo trong form này cho form kia được.

Để chia sẻ biến và các hàm, thủ tục giữa các form trong dự án thì bạn có thể khai báo

chúng trong một module của dự án. Module là một file có đuôi mở rộng .vb chỉ chứa các

mã. Bạn có thể lưu module bằng cách chọn Flie | Save Module1 As.

1.1. Tạo và lưu module chuẩn

Bây giờ chúng ta tạo một module với ví dụ MymoduleTest sau đây:

Bạn tạo mới một giải pháp và thêm vào một dự án cùng tên MyModuleTest như đã biết. Tại

cửa sổ Solution Explorer bạn R-Click vào tên dự án và chọn Add | New Item như hình:

pdf 12 trang yennguyen 4820
Bạn đang xem tài liệu "Bài giảng Hướng dẫn lập trình VB.NET - Chương 10: Sử dụng các MODULE (đơn thể) và thủ tục (PROCEDURE) - Phạm Đức Lập", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Hướng dẫn lập trình VB.NET - Chương 10: Sử dụng các MODULE (đơn thể) và thủ tục (PROCEDURE) - Phạm Đức Lập

Bài giảng Hướng dẫn lập trình VB.NET - Chương 10: Sử dụng các MODULE (đơn thể) và thủ tục (PROCEDURE) - Phạm Đức Lập
Hướng dẫn lập trình VB.NET Chương 10: Sử dụng các module và thủ tục 
Biên soạn: Phạm Đức Lập - 1 - Add: cnt-44-dh, VIMARU 
Chương 10: 
Sử dụng các MODULE (đơn thể) và thủ tục (PROCEDURE) 
--------oOo-------- 
Nội dung thảo luận: 
 - Tạo các module chuẩn 
 - Khai báo và sử dụng các biến Public toàn cục 
 - Tạo các hàm và thủ tục tự định nghĩa bởi người dùng 
 - Gọi thực thi hàm và thủ tục do người dùng cài đặt 
Module là nơi chứa các biến, các hàm, thủ tục và có thể triệu gọi từ bất cứ nơi nào trong 
chương trình. 
1. Làm việc với MODULE chuẩn 
Khi dự án của bạn rất lớn thì việc có nhiều form là điều đương nhiên. Có điều bạn không 
thể sử dụng những hàm, biến khai báo trong form này cho form kia được. 
Để chia sẻ biến và các hàm, thủ tục giữa các form trong dự án thì bạn có thể khai báo 
chúng trong một module của dự án. Module là một file có đuôi mở rộng .vb chỉ chứa các 
mã. Bạn có thể lưu module bằng cách chọn Flie | Save Module1 As. 
1.1. Tạo và lưu module chuẩn 
Bây giờ chúng ta tạo một module với ví dụ MymoduleTest sau đây: 
Bạn tạo mới một giải pháp và thêm vào một dự án cùng tên MyModuleTest như đã biết. Tại 
cửa sổ Solution Explorer bạn R-Click vào tên dự án và chọn Add | New Item như hình: 
Hướng dẫn lập trình VB.NET Chương 10: Sử dụng các module và thủ tục 
Biên soạn: Phạm Đức Lập - 2 - Add: cnt-44-dh, VIMARU 
Bạn chọn mẫu Module và nhấn Open. Ở đây bạn có thể để tên mặc định là Module1.vb hay 
có thể nhập tên module luôn. Nếu để tên mặc định thì việc thay đổi tên sau này có thể dùng 
phương thức File | Save Module1 As như đã bàn: 
Khi nhấn Open thì một cửa sổ ở chế độ Code Editor hiện ra cho phép ta thao tác mã. 
Bạn có thể xem liệt kê các thành phần của dự án ba gồm cả module1 ta vừa tạo bằng cách 
double click vào phần tiêu đề cửa sổ Solution Explorer: 
Để cho cửa sổ này trở về vị trí cũ bạn có thể double click một lần nữa. Để xem thuộc tính 
của module, bạn R-Click vào module và chọn Properties: 
Hướng dẫn lập trình VB.NET Chương 10: Sử dụng các module và thủ tục 
Biên soạn: Phạm Đức Lập - 3 - Add: cnt-44-dh, VIMARU 
Bạn thử thay đổi tên của module bằng thuộc tính File Name xem sao. Ở đây ta thay tên 
thành MathFuction: 
Để xóa module, bạn r-clik vào nó và chọn Delete. Để tạm loại bỏ nó ra khỏi dự án bạn R-
Click chọn Exclude From Projects (có thể chọn Project | Exclude From Project). Khi nào 
muốn thêm trở lại bạn chọn Add | Exist Item. 
2. Làm việc với các biến Public (biến toàn cục) 
Biến toàn cục là biến được khai báo với từ khóa Public ở trước. Biến này cho phép bạn 
triệu gọi xử lý ở bất cứ nơi nào trong chương trình. Ví dụ: 
 Public toancuc As Integer 
Khai báo này khai báo một biến tên toancuc có kiểu dữ liệu là Integer. 
Bây giờ ta quay lại chương trình LuckySeven đã làm trong các chương trước nhưng trong 
ví dụ này ta sử dụng một biến toàn cục có tên solanthang để lưu lại số lần người chơi chiến 
thắng và cho hiển thị nó lên trong một nhãn. 
Hướng dẫn lập trình VB.NET Chương 10: Sử dụng các module và thủ tục 
Biên soạn: Phạm Đức Lập - 4 - Add: cnt-44-dh, VIMARU 
Ví dụ LUCKYSEVEN: 
Bạn lưu lại dự án trên đây và đóng nó lại. Chọn tạo mới một giải pháp và thêm vào một dự 
án cùng tên LuckySeven như đã biết. Bạn thiết kế Form như hình: 
Chương trình như đã biết bao gồm ba nhãn hiển thị 3 số ngẫu nhiên, hai nút cho phép click 
quay số và kêt thúc chương trình, một ô PictureBox hiển thị ảnh khi chiến thắng, một nhãn 
ghi tên chương trình LuckySeven. Bây giờ ta thiết kế thêm một nhãn nữa (Label5) hiển thị 
số lần chiến thắng của người chơi. 
Bây giờ ta thêm vào một module – module module1 và gõ vào trong đó một khai báo biến 
như sau: 
 Public solanchienthang As Integer 
Bây giờ chúng ta sẽ sử dụng biến này trong thủ tục Button1_Click như sau: 
 Private Sub Button1_Click(ByVal sender As System.Object, _ 
 ByVal e As System.EventArgs) Handles Button1.Click 
 PictureBox1.Visible = False 
 Label1.Text = CStr(Int(Rnd() * 10)) 
 Label2.Text = CStr(Int(Rnd() * 10)) 
 Label3.Text = CStr(Int(Rnd() * 10)) 
 If (Label1.Text = "7") Or (Label2.Text = "7") _ 
 Or (Label3.Text = "7") Then 
 PictureBox1.Visible = True 
 Beep() 
 solanchienthang += 1 
 Label5.Text = "Wins: " & solanchienthang 
 End If 
 End Sub 
Bạn cũng dùng hàm Randomize() trong sự kiện Form_Load như ví dụ trước. 
Hướng dẫn lập trình VB.NET Chương 10: Sử dụng các module và thủ tục 
Biên soạn: Phạm Đức Lập - 5 - Add: cnt-44-dh, VIMARU 
Như vậy chúng ta đã bước đầu dùng đến module và biến toàn cục. Bây giờ bạn hãy chạy 
chương trình để xem nó hoạt động như thế nào. 
Biến phạm vi form và biến public trong module: 
Biến phạm vi form là biến khai báo ở đầu chương trình dưới dòng khai báo form. Với 
chương trình này thì cả hai cách đều cho kết quả như nhau. Nhưng những biến khai báo ở 
mức độ form chỉ có thể sử dụng trong các hàm, các thủ tục ở form đó mà thôi. 
3. Tạo thủ tục (Procedure) 
Thủ tục nhằm để nhóm các phát biểu lệnh liên quan đến nhau thực thi một tác vụ nào đó. 
Có hai dạng thủ tục là, thủ tục dạng hàm Function và thủ tục dạng thuần túy Procedure. 
Thủ tục hàm thường để tính toán và trả về một kết quả nào đó cho nơi gọi hàm. Còn thủ 
tục thuần túy chỉ để thực hiện một tác vụ nào đó. Cả hai dạng đều có thể nhận đối số để 
làm nguồn tính toán, thực hiện thao tác xử lý. 
Bạn có thể khai báo hàm và thủ tục trong form nhưng thường thì việc khai báo này được 
đặt trong module. Thủ tục giúp bạn không phải viết lại những đoạn mã trùng lặp nhiều lần 
chỉ để thực hiện một tác vụ nào đó. 
Khi thủ tục đã hoàn thiện bạn có thể biên dịch thành file .dll lưu trong thư viện để sử dụng 
cho các dự án khác. 
4. Xây dựng hàm (FUNCTION) 
Hàm được khai báo bằng từ khóa Function và kết thúc bằng từ khóa End Function. Việc 
thực thi hay gọi hàm bằng cách dùng tên hàm cùng các đối số trong ngoặc đơn nếu có. 
Hướng dẫn lập trình VB.NET Chương 10: Sử dụng các module và thủ tục 
Biên soạn: Phạm Đức Lập - 6 - Add: cnt-44-dh, VIMARU 
Khi hàm được khai báo trong module được mặc định là hàm toàn cục và có thể được triệu 
gọi từ bất cứ nơi nào của dự án. 
4.2. Cú pháp khai báo hàm 
Cú pháp của hàm: 
 Function FunctionName([argument]) As Type 
 Function_statements() 
 [Return value] 
 End Function 
Trong đó: 
 - FunctionName: tên của hàm mà mình muốn tạo, dùng để gọi hàm sau này 
 - As Type: định nghĩa kiểu dl trả về của hàm sau khi tính toán xong 
 - Argument: danh sách đối số truyền cho hàm. Mặc định VB sẽ thêm từ khóa Byval 
tức truyền theo tham trị, tất cả những thay đổi trong hàm lên đối số không làm thay ảnh 
hưởng đến đối số truyền vào khi hàm chấm dứt. 
 - Function_Statement: các khối phát biểu cài đặt cho hàm. 
 - Return: cho phép trả lại kết quả sau cùng của hàm cho nơi gọi hàm. 
Ví dụ: 
 Function TotalTax(ByVal Cost As Single) As Single 
 Dim StateTax, CityTax As Single 
 StateTax = Cost * 0.05 
 CityTax = Cost * 0.015 
 TotalTax = StateTax + CityTax 
 End Function 
Hàm trên trả về giá trị thuế tổng TotalTax bằng câu lệnh ở phát biểu cuối cùng. Bạn có thể 
dùng phát biểu Return như ví dụ sau để trả về kết quả cho hàm: 
 Function TotalTax(ByVal Cost As Single) As Single 
 Dim StateTax, CityTax As Single 
 StateTax = Cost * 0.05 
 CityTax = Cost * 0.015 
 Return (StateTax + CityTax) 
 End Function 
4.2. Gọi hàm 
Việc gọi hàm theo cú pháp sau: 
 Label1.Text = TotalTax(500) 
Phát biểu trên sẽ tính thuế dựa trên chi phí đầu vào là $500 và gán kết quả cho thuộc tính 
Text của nhãn label1. 
4.3. Sử dụng hàm thực hiện tác vụ tính toán 
Trong ví dụ sau ta sẽ quay trở lại ví dụ LuckySeven và tính tỷ lệ chiến thắng rồi gán vào 
thuộc tính của nhãn mới Label6. 
Bạn thiết kế lại giao diện như sau: 
Hướng dẫn lập trình VB.NET Chương 10: Sử dụng các module và thủ tục 
Biên soạn: Phạm Đức Lập - 7 - Add: cnt-44-dh, VIMARU 
Viết mã: 
Trước hết ta khai báo thêm biến public trong module1 như sau: 
 Public solanchienthang As Short 
 Public Spins As Short 
Sau đó bạn tạo thủ tục HitRate tính số phần trăm chiến thắng. Số phần trăm này được tính 
bằng tỉ số giữa số lần chiến thắng trên tổng số lần quay: 
 Function HitRate(ByVal Hits As Short, _ 
 ByVal Tries As Short) As String 
 Dim percent As Single 
 percent = Hits / Tries 
 Return Format(percent, "0.0%") 
 End Function 
Bây giờ bạn trở lại thủ tục Button1_Click và nhập như sau: 
 Private Sub Button1_Click(ByVal sender As System.Object, _ 
 ByVal e As System.EventArgs) Handles Button1.Click 
 PictureBox1.Visible = False 
 Label1.Text = CStr(Int(Rnd() * 10)) 
 Label2.Text = CStr(Int(Rnd() * 10)) 
 Label3.Text = CStr(Int(Rnd() * 10)) 
 Spins += 1 
 If (Label1.Text = "7") Or (Label2.Text = "7") _ 
 Or (Label3.Text = "7") Then 
 PictureBox1.Visible = True 
 Beep() 
 solanchienthang += 1 
 Label5.Text = "Wins: " & solanchienthang 
 End If 
 Label6.Text = HitRate(solanchienthang, Spins) 
 End Sub 
Hướng dẫn lập trình VB.NET Chương 10: Sử dụng các module và thủ tục 
Biên soạn: Phạm Đức Lập - 8 - Add: cnt-44-dh, VIMARU 
Giá trị của hàm HitRate đã được gán cho thuộc tính Text của nhãn Label6. 
Chạy chương trình: 
Bạn chọn Save All và chạy bằng cách ấn F5 và theo dõi kết quả. 
5. Viết và xây dựng thủ tục SUB 
Thủ tục này không trả về giá trị. Nó thiết kế để thực hiện một thao tác nào đó. Nó được 
khai báo bằng từ khóa SubEnd Sub. Tuy không trả về giá trị ở cuối thủ tục nhưng nó 
cũng có thể trả về giá trị thông qua đối số truyền vào thủ tục. 
5.1. Khai báo thủ tục 
Cú pháp: 
 Sub ProcedureName([Arguments]) 
 'Procedure Statement 
 End Sub 
Trong đó: 
 - ProcedureName: tên của thủ tục. 
 - Arguments: các đối số. 
 - Procedure Statements: Các phát biểu cài đặt cho phần nội dung của thủ tục. 
Ví dụ: 
Bạn tạo ví dụ BestWishesForBirthday để minh họa cách tạo và dùng hàm Sub. Thiết kế 
form1 chỉ có một nút “End” và nhập End vào thủ tục Button1_Click. 
Bây giờ bạn thêm một module vào chương trình và khai báo trong đó một thủ tục như sau: 
Hướng dẫn lập trình VB.NET Chương 10: Sử dụng các module và thủ tục 
Biên soạn: Phạm Đức Lập - 9 - Add: cnt-44-dh, VIMARU 
 Sub BirthdayGreeting(ByVal Person As String) 
 Dim msg As String 
 If Person "" Then 
 msg = "Happy Birthday " & Person & "!" 
 Else 
 msg = "Name no specified" 
 End If 
 MsgBox(msg, , "BestWhished") 
 End Sub 
Thủ tục này cho phép hiện một lời chào với người có tên là đối số truyền vào cho biến 
Person. 
Bây giờ trở về cửa sổ soạn mã cho form1 và tạo sự kiện Form1_Load nhập đoạn mã sau: 
 Private Sub Form1_Load(ByVal sender As System.Object, _ 
 ByVal e As System.EventArgs) Handles MyBase.Load 
 Dim name As String 
 Do 
 name = InputBox("Enter a name.", "Birthday") 
 BirthdayGreeting(name) 
 Loop Until name = "" 
 End Sub 
Đoạn mã này sẽ hiện một hộp thoại để người dùng nhập tên của họ cho chương trình gọi 
thủ tục trên chúc sinh nhật người đó. Khi không nhập vào thì chương trình hiện form1 với 
nút “End” cho phép kết thúc chương trình: 
5.3. Sử dụng thủ tục SUB quản lý nhập liệu của người dùng 
Bài tập sau đây chúng ta sẽ tạo một thủ tục trong một module cho phép người dùng nhập 
vào tên và hiển thị tên đó trong một ô textbox. 
Tìm hiểu chương trình: 
Hướng dẫn lập trình VB.NET Chương 10: Sử dụng các module và thủ tục 
Biên soạn: Phạm Đức Lập - 10 - Add: cnt-44-dh, 
VIMARU 
Chương trình mô phỏng một form cập nhật tên nhân viên mới vào hai vị trí là Sales và 
Marketing. Khi người dùng click vào nút addname bên dưới ô textbox sales để thêm vào 
một nhân viên sales mới thì một ô nhập liệu Inputbox hiện lên. Tên mới của nhân viên này 
sẽ hiển thị vào ô textbox tương ứng. Tương tự như trên với việc nhập nhân viên vào vị trí 
marketing. 
Thiết kế giao diện: 
Giao diện chương trình như hình: 
Bạn tạo một giải pháp mới có tên là MyTextboxSub và thêm vào một dự án cùng tên rồi 
thiết kế form như hình. Trong đó các thuộc tính name của các điều khiển như sau: 
- Ô textbox dưới nhãn Sales là txtSales 
- Ô textbox dưới nhãn Marketing là txtMkt 
- Nút Add Name dưới ô txtSales là btnSaleAdd 
- Nút Add Name dưới ô txtMkt là btnMktAdd 
Các thuộc tính khác của hai textbox như tạo chế độ MultiLine và thanh cuộn dọc thì bạn đã 
biết tạo trong ví dụ trước. 
Viết mã : 
Trước hết ta tạo một thủ tục để người dùng nhập vào tên của nhân viên mới khi click nút 
Add Name thêm tên nhân viên – thủ tục có tên AddName. 
Bạn add vào dự án một module1.vb và tạo ra hàm AddName như sau : 
Hướng dẫn lập trình VB.NET Chương 10: Sử dụng các module và thủ tục 
Biên soạn: Phạm Đức Lập - 11 - Add: cnt-44-dh, 
VIMARU 
Module Module1 
 Sub AddName(ByVal vitri As String, _ 
 ByRef tenNVmoi As String) 
 Dim Prompt, ten, dinhdang As String 
 Prompt = "Enter a " & vitri & "employee." 
 ten = InputBox(Prompt, "InputBox") 
 dinhdang = Chr(13) + Chr(10) 
 tenNVmoi = ten & dinhdang 
 End Sub 
End Module 
Trong đó, đối số vitri là “Sales” hay “Marketing”; tenNVmoi là tên của nhân viên khi 
người dùng nhập vào bằng inputBox; 
Bạn tạo thủ tục btnsaleAdd_Click bằng cách double click vào nút btnSale và nhập đoạn 
mã như sau: 
 Dim salesTeam As String 
 AddName("Sales", salesTeam) 
 txtSale.Text = txtSale.Text & salesTeam 
Tiếp tục tạo thủ tục btnMktAdd_Click và nhập mã như sau: 
 Dim MktTeam As String 
 AddName("Marketing", MktTeam) 
 txtMkt.Text = txtMkt.Text & MktTeam 
Ngoài ra bạn cũng tạo thủ tục click của nút btnQuit với phát biểu End để kết thúc chương 
trình. 
Chạy chương trình: 
Bây giờ bạn chạy chương trình và thêm vào vài nhân viên mới ở cả hai vị trí. 
Hướng dẫn lập trình VB.NET Chương 10: Sử dụng các module và thủ tục 
Biên soạn: Phạm Đức Lập - 12 - Add: cnt-44-dh, 
VIMARU 
6. Truyền đối số theo tham trị và tham biến 
Trong phần bàn về thủ tục, ta thấy đối số có thể truyền theo tham trị (Byval) hay tham 
chiếu (Byref). Mặc định khi không khai báo thì nó truyền theo tham trị. 
Để truyền theo tham trị ta khai báo đối số trong thủ tục bằng từ khóa Byval. Khi đó bất cứ 
thay đổi nào trong thủ tục cũng không làm thay đổi giá trị của biến sau khi thủ tục chấm 
dứt. 
Ngược lại, để truyền theo tham chiếu, ta khai báo đối số bằng từ khóa Byref. Khi đó những 
thay đổi trong hàm hay thủ tục sẽ làm thay đổi giá trị của biến. 
Khi nào bạn chưa biết dùng Byval hay Byref thì bạn nên dùng Byval. 
7. Tổng kết chương 10 
Chương này đã kết thúc. Bạn hãy làm bảng tổng kết những gì đã học. 

File đính kèm:

  • pdfbai_giang_huong_dan_lap_trinh_vb_net_chuong_10_su_dung_cac_m.pdf