Trong một lệnh If…Then, có thể có lệnh If…Then khác như là một câu lệnh bình thường! Lệnh If…Then thứ hai chỉ được thực hiện nếu điều kiện của lệnh thứ nhất đúng. Lệnh thứ nhất chứa lệnh thứ hai. Điều này gọi là “lồng nhau” bởi vì một lệnh If…Then lồng, hoặc nằm gọn trong lệnh khác.
Đầu tiên hãy xem một ví dụ trong đời sống thực tế. Nếu tôi có 200 đô la và nếu cửa hàng bách hóa mở cửa thì tôi sẽ mua một máy nghe nhạc MP3.
Viết dưới dạng giả mã nó có dạng như sau:
If I have $200 Then
If the store is open Then
I will buy an MP3 player
End If
End If
If Tôi có 200 đô la Then
If Cửa hàng bách hoá mở cửa Then
Tôi sẽ mua một máy nghe nhạc MP3
End If
End If
Nó giống như hai lệnh If...Then trong một! Lệnh If...Then thứ nhất bọc xung quanh lệnh thứ hai. Lệnh thứ nhất có một điều kiện (nếu tôi có 200 đô la) và một lệnh khi điều kiện được
Gợi ý
Việc để các dòng lệnh thụt vào là rất quan trọng để tránh lỗi khi viết các câu lệnh If “lồng nhau”.
đáp ứng (nếu cửa hàng bách hoá mở cửa thì tôi sẽ mua một máy nghe nhạc MP3) đó là một lệnh If…Then khác. Lệnh If...Then thứ hai cũng có điều kiện riêng của nó (nếu cửa hàng bách hoá mở cửa) và lệnh điều kiện riêng của nó (tôi sẽ
mua một máy nghe nhạc MP3).
Như bạn có thể thấy, tôi phải có 200 đô la và cửa hàng bách hoá phải mở cửa, hoặc không có máy nghe nhạc MP3. Cả hai điều kiện phải đúng. Nếu tôi không có 200 đô la, điều kiện của lệnh If...Then thứ nhất sai và không cần quan tâm đến cửa hàng bách hóa có mở hay không - không có máy nghe nhạc MP3!
Bây giờ hãy xem thêm một vài ví dụ. Tạo một ứng
dụng tên là Nesting (lồng nhau). Thêm hai ô đánh dấu và một nút lệnh vào Form1. Thay đổi thuộc tính Text của Button1 thành "Ai được đánh dấu?" Nhấp đúp vào Button1 để mở cửa sổ soạn thảo lệnh. Thêm các dòng lệnh sau đây vào thủ tục xử lý sự kiện nhấn nút:
If CheckBox1.Checked = True Then
If CheckBox2.Checked = True Then
MessageBox.Show("Tất cảđược đánh dấu.")
End If
End If
Dịch và chạy chương trình. Đánh dấu ô đánh dấu thứ nhất sau đó nhấn nút "Ai được đánh dấu?". Điều gì xảy ra? Ồ, không có gì xảy ra. Bây giờ đánh dấu ô thứ hai và nhấn nút Ai được đánh dấu? Lần nữa. Lần này hộp thông báo hiển thị thông báo "Tất cả được đánh dấu.". Như bạn có thể thấy, dòng lệnh thứ nhất là điều kiện:
If CheckBox1.Checked = True Then
Điều kiện này có một lệnh điều kiện. Lệnh điều kiện này là một lệnh If...Then lồng trong lệnh thứ nhất. Lệnh If...Then lồng lại có điều kiện riêng của nó:
If CheckBox2.Checked = True Then
Nó cũng có lệnh điều kiện riêng của nó:
MessageBox.Show("Tất cảđược đánh dấu.")
Vì thế cái gì xảy ra? nếu điều kiện thứ nhất đúng (CheckBox1 được đánh dấu) thì lệnh điều kiện được thực hiện. Lệnh điều kiện xuất hiện là lệnh If...Then thứ hai. Nếu điều kiện thứ hai đúng (ô đánh dấu CheckBox2 được đánh dấu) thì lệnh điều kiện thứ hai được thực hiện, nó sẽ hiển thị hộp thông báo. Cả hai điều kiện phải đúng để cho hộp thông báo hiển thị. Nghĩa là, cả hai ô đánh dấu Checkbox1 và Checkbox2 phải được đánh dấu hoặc hộp thông báo sẽ không hiển thị.
Gợi ý Bạn sẽ nhận xét rằng trong trường hợp này chỉ cần 1 câu lệnh If là đủ: If tôi có $200 And cửa hàng mở. Việc lồng các lệnh If cần thiết khi có nhiều câu lệnh If và các đoạn mã
được để thụt vào tương ứng, hoặc sau này khi giới thiệu tiếp phần Else của câu lệnh If.
Lưu ý rằng trong đoạn mã trên câu lệnh If…Then thứ hai nằm trong câu lệnh If…Then thứ nhất. End If của If…Then thứ nhất nằm sau End If của If…Then thứ hai. Có thể lồng nhiều câu lệnh If…Then vào nhau để đoạn mã cần thiết chỉ chạy khi tất cả các điều kiện được đáp ứng.