Viết chương trình giải phương trình bậc 2.Hệsốa, b, c nhập từcác
TextBox. Kết quảnghiệm được hiển thịtrên 2 nhãn, hoặc thông báo là vô nghiệm
bằng hàm MsgBox. Giao diện có dạng nhưsau:
Hình 2.1– Giao diện chương trình
Bài 2: Một form nhập(ví dụ: hàng hoá, E-Mail, Web Hosting ) thường có rất nhiều
textbox, combobox và mỗi khi thêm một bản ghi mới thì đều cần xoá trắng nội dung
trong các textbox, combobox này. Hãy tạo một form nhưHình 2 và viết lệnh cho nút
Xoáthực hiện xoá trắng các điều khiển này một cách nhanh nhất !.
42 trang |
Chia sẻ: oanh_nt | Lượt xem: 1550 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Bài tập lập trình hướng sự kiện: Sử dụng các điều khiển cơ bản, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 38
Ch−¬ng ii
Sö dông c¸c ®iÒu khiÓn c¬ b¶n
MỤC TIÊU: SAU KHI HOÀN THÀNH CÁC BÀI TẬP, NGƯỜI HỌC CÓ THỂ
¾ Sử dụng được các điều khiển cơ bản của VB
¾ Kết hợp sử dụng nhiều điều khiển cơ bản trong chương trình
¾ Vận dụng các điều khiển để viết được một số chương trình tiện ích.
A - ĐỀ BÀI TẬP
Bài 1: Viết chương trình giải phương trình bậc 2. Hệ số a, b, c nhập từ các
TextBox. Kết quả nghiệm được hiển thị trên 2 nhãn, hoặc thông báo là vô nghiệm
bằng hàm MsgBox. Giao diện có dạng như sau:
Hình 2.1 – Giao diện chương trình
Bài 2: Một form nhập (ví dụ: hàng hoá, E-Mail, Web Hosting…) thường có rất nhiều
textbox, combobox và mỗi khi thêm một bản ghi mới thì đều cần xoá trắng nội dung
trong các textbox, combobox này. Hãy tạo một form như Hình 2 và viết lệnh cho nút
Xoá thực hiện xoá trắng các điều khiển này một cách nhanh nhất !.
Hình 2.2 – Form nhập hàng hoá
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 39
Bài 3: Viết chương trình nhập họ tên sinh viên của một lớp vào một ListBox, trong
qua trình nhập có thể cho phép người dùng xoá một số mục của Listbox. Giao diện
chương trình như hình 3. Lưu ý: Mục thêm sau được đặt lên đầu danh sách.
Hình 2.3 – Thêm và xoá một mục khỏi Listbox
Bài 4: Viết chương trình như bài số 3, nhưng khi “Xoá khỏi danh sách” thì có thể
thực hiện chọn nhiều mục với các Checkbox. Giao diện giống như Hình 4.
Hình 2.4 - Chọn các mục với Style là “Checkbox”
Bài 5: Minh hoạ sử dụng điều khiển Listbox và thuộc tính đa lựa chọn.
Xây dựng giao diện chương trình như hình 5
Hình 2.5 - Chuyển các mục từ một Listbox sang một Listbox khác
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 40
Yêu cầu:
• Khi người dùng click vào nút thì các mục đang được chọn trong “Danh
sách người dùng” phía bên trái sẽ được chèn vào Listbox phía bên phải.
• Khi người dùng click vào nút thì các mục đang được chọn trong Listbox
bên phải sẽ bị xoá (Remove) khỏi Listbox đó.
• Trong cả hai Listbox, đều cho phép người dùng lựa chọn nhiều mục đồng thời.
• Click vào nút Thoát thì kết thúc chương trình.
• Yêu cầu thêm: Sau khi đã chèn các mục đang chọn bên Listbox trái sang List
bên phải thì cũng đồng thời xoá các mục đang chọn đó khỏi Listbox bên trái.
Bài 6: Minh hoạ sử dụng điều khiển Listbox và hàm tách xâu Split.
Hình 2.6 - Đảo tên lên trước họ đệm
Yêu cầu:
• Nạp sẵn một số mục vào trong Listbox phía trái trong thủ tục Form_load
• Khi người dùng click vào nút thì thực hiện đảo tên lên trước
họ trong listbox phía trái và chèn vào Listbox phía phải.
Bài 7: Tách địa chỉ E-Mail sử dụng hàm Split
Các trang gửi E-Mail như Yahoo hay phần mềm Outlook Express đều cho phép
người dùng có thể gửi tới nhiều địa chỉ khác nhau và mỗi địa chỉ này cách nhau bởi
dấu chấm phảy.
Hãy xây dựng một Form như hình 7
Yêu cầu: Khi người dùng click vào nút "Thực hiện tách" thì các địa chỉ trong hộp
Textbox sẽ được tách ra, sau đó chèn vào Listbox phía bên phải. Ví dụ: nếu nhập
vào là abc@hn.vnn;xyz@yahoo.com thì tách thành 2 mục là abc@hn.vnn.vn và
xyz@yahoo.com.
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 41
Hình 2.7– Tách xâu sử dụng hàm Split
Bài 8: Sắp xếp danh sách theo TÊN, áp dụng bài tập số 7 (Hàm Split).
Hình 2.8 - Sắp xếp danh sách theo TÊN
Yêu cầu:
• Nạp sẵn (sử dụng phương thức AddItem) một số mục vào Listbox phía trái
• Copy các mục trong Listbox phía trái sang Listbox phía phải.
• Khi người dùng Click chọn nút “Sắp xếp theo tên” thì sắp xếp danh sách
sinh viên trong Listbox phía phải theo thứ tự ưu tiên Tên, sau đó mới đến họ.
Bài 9: Minh hoạ sử dụng điều khiển ComboBox.
Yêu cầu sau:
• Khi người dùng nhập một địa chỉ Web (URL) và nhấn Enter thì thực hiện thêm
mục này vào trong ComboBox
• Mở trang Web với địa chỉ tương ứng mà người dùng vừa nhập vào.
• Mở trang Web tương ứng khi người dùng click chọn trong hộp ComboBox.
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 42
Hình 2.9 – Thao tác với ComboBox và WebBrowser để duyệt Web
Bài 10: Minh hoạ thao tác với ComboBox và việc lấy tên font của hệ thống.
Yêu cầu:
• Nạp tất cả các Font chữ hiện có trong máy tính vào hộp Combo
• Đặt font chữ cho textbox bằng với Font chữ khi người dùng chọn trong hộp
Combox. Trong đó, hộp Combox hiển thị ở chế độ (style) là : Dropdown list.
• Đặt cỡ chữ cho textbox bằng với cỡ chữ trong hộp Combox cỡ chữ
• Hộp Textbox hiển thị ở chế độ MultiLine (Nhiều dòng).
Hình 2.10 - Kết hợp sử dụng nhiều hộp ComboBox
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 43
Bài 11: Minh hoạ sử dụng điều khiển Option button và sử dụng hàm API-
Exitwindow
Yêu cầu:
• Khi người dùng click chọn các mục Logoff, Restart, Shutdown và chọn mục
“Normal” thì thực hiện Logoff, Restart, shutdown ở chế độ “Normal” (Ở chế độ
này thì khi Restart, Shutdown…nếu có một ứng dụng đang chạy–ví dụ
Microsoft word-có dữ liệu chưa được lưu thì máy tính sẽ hỏi trước khi Restart)
• Khi người dùng click chọn các mục Logoff, Restart, Shutdown và chọn mục
“Bắt buộc” thì thực hiện Logoff, Restart, shutdown ở chế độ “Fore” (ở chế độ
này thì máy tính thực hiện ngay và dữ liệu chưa lưu sẽ bị mất).
• Giá trị chọn mặc định là Restart-Normal
Hình 2.11 - Khởi động máy tính ở chế độ Normal (bình thường)
Bài 12 – Minh hoạ sử dụng nhãn (Label) để giả lập thanh tiêu đề của cửa sổ.
Font chữ hiển thị trên các thanh tiêu đề của cửa sổ là font chữ hệ thống, thường
không phải là font tiếng việt. Do vậy khi chạy chương trình trên các máy tính khác
nhau thì việc hiển thị có thể không còn đúng nữa. Để giải quyết vấn đề này, có một
giải pháp là ẩn thanh tiêu đề của cửa sổ và thay vào đó là một Label và Font chữ
của Label sẽ được đặt là font chữ tiếng Việt nên việc hiển thị luôn đảm bảo giữa các
hệ thống khác nhau.
Yêu cầu:
• Xây dựng một Form như hình 10, trong đó tiêu đề là một Label với font chữ là
.vnArialH, cỡ chữ là 12pt.
• Khi người dùng di chuyển thanh tiêu đề thì form cũng di chuyển theo.
• Khi người dùng click vào nút thì thoát khỏi ứng dụng.
Hình 2.12 - Sử dụng Label thay cho thanh tiêu đề
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 44
Bài 13 – Minh hoạ sử dụng Label kết hợp với Frame và Timer.
a. Giao diện chương trình
Hình 2.13 - Cuộn văn bản với Label + Frame + Timer
b. Yêu cầu:
• Dòng chữ trong Label sẽ cuộn từ dưới lên.
• Khi Click vào nút thì thực hiện cuộn, còn khi click vào nút
thì dừng cuộn.
• Khi nội dung đã cuộn hết thì đặt lại Label về vị trí cuộn ban đầu.
Bài 14 : Yêu cầu như bài 13 nhưng tốc độ cuộn (Khoảng Interval của điều khiển
Timer) có thể thay đổi trực quan bằng thanh điều chỉnh tốc độ (Vscrollbar).
Hình 2.14 - Điều chỉnh tốc độ bằng thanh Vscroll.
Bài 15 - Sử dụng Label, kết hợp với Line để giả lập nút nhấn (Command button).
Khi chuột di chuyển ở ngoài “nút”
Khi chuột di chuyển bên trong “nút”
Hình 2.15 - Giả lập nút nhấn bằng điều khiển Label và Line
Yêu cầu: Tạo một nút nhấn “THOÁT” chỉ sử dụng Label và Line. Để :
• Khi người dùng click vào nút này thì thoát khỏi chương trình
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 45
• Di chuyển chuột vào Label thì Font chữ đổi thành ĐẬM, màu chữ trắng-nền
đen và đường thẳng (bên trái và trên chuyển thành màu ĐEN).
• Khi di chuyển ra khỏi Label (hay di chuyển chuột trong form) thì đặt lại về các
thuộc tính ban đầu.
Bài 16: Minh hoạ sử dụng điều khiển Timer tạo hiệu ứng chữ chạy.
Hình 2.16 - Sử dụng Timer tạo hiệu ứng chữ chạy trên thanh Tiêu đề
Yêu cầu: Dòng chữ “Trường Đại học Sư phạm Kỹ thuật Hưng Yên – Khoa Công
nghệ thông tin” liên tục chạy trên thanh tiêu đề cho đến khi người dùng click nút
“Dừng”. Tốc độ cuộn là 100 miligiây !. (Interval = 100).
Bài 17: Sử dụng Timer, viết chương trình “đồng hồ báo thức”.
Xây dựng chương trình để chơi một file nhạc (WAV, MP3) tại một thời điểm đã định.
Trong đó, thời gian chỉ định (gồm giờ : phút) có thể thay đổi và tên file nhạc cũng có
thể thay đổi.
Hình 2.17 – Giao diện chương trình “Đồng hồ báo thức”
Bài 18: Sử dụng điều khiển Timer kết hợp với điều khiển Line vẽ đồng hồ
Digital trên form. (Đồng hồ này chỉ cần có một kim giây).
Hình 2.18 - Đồng hồ điện tử
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 46
Bài 19: Sử dụng điều khiển Timer để ghi nhận các phím nhấn – KeyLogger
a. Giao diện
Hình 2.19 -Giao diện chương trình bắt phím từ các ứng dụng khác- KeyLogger
b. Yêu cầu
• Ghi nhận phím nhấn ở bất kỳ ứng dụng nào trong hệ thống.
• Khi người dùng click chọn nút “Kết thúc” thì lưu các phím nhấn đã ghi nhận
được vào trong tệp văn bản C:\Keys.txt
Bài 20: Minh hoạ sử dụng các điều khiển thao tác Tệp, Thư mục và Ổ đĩa.
a. Giao diện chương trình:
Hình 2.20 – Giao diện chương trình và kết qủa khi click "Xem kích thước file"
b. Yêu cầu:
• Mở file hiện hành (đang được chọn) khi người dùng click nút "Mở file này" hoặc
Click đúp một file.
• Xem kích thước file đang được chọn khi chọn nút “Xem kích thước file”
• Xoá file đang được chọn (cần hỏi người dùng xác nhận lại trước khi xoá).
• Thoát khỏi chương trình khi người dùng click nút "Thoát"
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 47
Bài 21: Minh hoạ khả năng kéo thả (Drag-Drop) file và thư mục.
a. Giao diện
Hình 2.21 – Thao tác với tệp, thư mục bằng Drag-Drop (Kéo - thả)
b. Yêu cầu:
Như bài 20 nhưng thêm khả năng “Kéo-Thả” (Drag-Drop): Khi người dùng kéo một
tệp và thả vào nút “Mở” thì mở tệp đó. Còn khi người dùng kéo tệp vào nút “Xem
kích thước file” thì thông báo kích thước file bằng hàm MsgBox. Khi người dùng kéo
và thả vào nút "Xoá file này" thì thực hiện Xoá file đang được chọn.
Bài 22: Thao tác với điều khiển FileListbox và khả năng đa lựa chọn.
a. Giao diện chương trình
Hình 2.22 - Chọn nhiều file trong FileListbox
b. Yêu cầu:
• Cho phép chọn nhiều file trong điều khiển FileListbox
• Khi click vào nút thì thực hiện chèn đường dẫn và tên file của những file
đang được chọn vào trong Listbox phía bên phải. Sau đó hiển thị tổng số file
và tổng kích thước của các file có trong Listbox.
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 48
Bài 23: Sử dụng điều khiển Image làm ảnh nền cho form.
a. Giao diện chương trình
Hình 2.23 - Đặt ảnh nền cho Form bằng điều khiển Image
b. Yêu cầu:
• Khi người dùng Click nút “Chọn file ảnh cho Form” thì mở hộp thoại chọn file
và nạp file đó vào điều khiển Image.
• Khi người dùng Click nút “Huỷ bỏ ảnh nền” thì huỷ ảnh trong điều khiển Image
Bài 24:Sử dụng điều khiển PictureBox tạo Icon tại khay hệ thống (SystemTray)
a. Giao diện
(Picture1)
Hình 2.24 - (Hiện menu khi click chuột phải)
b. Yêu cầu
• Đặt một biểu tượng (bất kỳ) dưới khay hệ thống như hình 24
• Khi người dùng click chuột phải lên biểu tượng trên khay hệ thống thì hiển thị
(Popup) menu như hình 24.
• Khi người dùng click chọn mục "About" thì hiển thị một thông báo.
• Khi người dùng click chọn mục Exit thì thoát khỏi chương trình.
• Form phải được ẩn (Hide).
• Yêu cầu thêm: Có thể tạo biểu tượng nhấp nháy (thay đổi liên tục biểu tượng)
ở dưới khay hệ thống. (HD: Dùng một timer)
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 49
B- HƯỚNG DẪN - GIẢI MẪU
Bài 1
a. Thiết kế giao diện và thiết lập các thuộc tính cho các điều khiển (Lưu ý: Từ nay về
sau, tên của các điều khiển được viết ở ngay cạnh điều khiển đó. Riêng với điều
khiển Label nào mà không thực sự cần thiết thì tên có thể để mặc định - bỏ qua)
Hình 2.25 - Đặt tên cho các điều khiển trên Form
b. Hướng dẫn
• Để lấy giá trị người dùng nhập trong Textbox, có thể truy cập thuộc tính Text,
ví dụ: txtA.Text để lấy giá trị người dùng đã nhập trong hộp Textbox hệ số a.
• Có thể sử dụng cấu trúc If…Then nhưng với VB thì cấu trúc Select Case là
phù hợp hơn cả.
c. Chương trình mẫu:
Private Sub cmdThucHien_Click()
Dim Delta As Single
Delta = txtB.Text * txtB.Text - 4 * txtA.Text * txtC.Text
Select Case Delta
Case Is < 0
MsgBox "Ph−¬ng tr×nh v« nghiÖm"
Case 0
lblX1.Caption = "X1 = " & (-txtB.Text / 2 / txtA.Text)
lblX2.Caption = "X2 = " & (-txtB.Text / 2 / txtA.Text)
Case Is > 0
lblX1.Caption = "X1 = " & ((-txtB.Text + Sqr(Delta)) / 2 / txtA.Text)
lblX2.Caption = "X2 = " & ((-txtB.Text - Sqr(Delta)) / 2 / txtA.Text)
End Select
End Sub
d. Ghi chú:
• Trong cấu trúc Select Case, nếu muốn thực hiện một công việc ứng với biểu
thức cần kiểm tra nằm trong một miền giá trị thì có thể sử dụng từ khoá "IS"
• Cấu trúc Select Case không chỉ làm việc với biểu thức ở dạng số
mà còn cả dạng xâu ký tự (nhiều ngôn ngữ khác không có khả năng này).
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 50
• Giá trị trong textbox luôn được VB coi là một XÂU. Tuy nhiên, nếu các giá trị
trong Textbox tham gia vào các phép tính +,-, *, /, với một số khác thì xâu tự
động được chuyển thành số theo ngầm định. Do vậy, chúng ta không nhất
thiết phải chuyển đổi chúng tường minh bằng hàm Val. Trong trường hợp,
nếu phép toán là + (Cộng) mà 2 toán hạng tham gia đều là các Textbox thì bắt
buộc phải chuyển đổi chúng về số bằng hàm Val trước khi cộng.
Bài 2:
a. Giao diện và thiết lập tham số cho các điều khiển: Tên của các điều khiển được
đặt như trong hình 26. Trong đó có một điều khiển chuyên dùng cho nhập ngày
tháng rất thuận tiện là Date Time Picker (nằm trong thư viện : Microsoft Windows
Common Control-2 6.0)
Hình 2.26 – Đặt tên cho các điều khiển trên Form
b. Hướng dẫn
Trong VB, tất cả các điều khiển đều nằm trong một tập hợp (Collection) là Controls.
Ta có thể duyệt tất cả các điều khiển trong tập hợp này bằng cấu trúc lặp
"For….Each…in Controls", tại mỗi vòng lặp ta có thể kiểm tra xem điều khiển hiện tại
thuộc loại nào ?. Nếu là điều khiển Textbox hay ComboBox thì đặt thuộc tính Text
bằng rỗng (tức là xoá).
c. Chương trình nguồn
Viết lệnh cho sự kiện Click của nút nhấn cmdXoa
Private Sub cmdXoa_Click()
Dim obj As Object
For Each obj In Me.Controls
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 51
If (TypeOf obj Is TextBox) Or (TypeOf obj Is ComboBox) Then
obj.Text = ""
End If
Next
End Sub
d. Ghi chú:
• Để duyệt tất cả các phần tử trong một tập hợp thì bắt buộc phải dùng cấu trúc
For Each …
• Để kiểm tra xem một đối tượng X nào đó thuộc loại điều khiển nào, có thể
dùng từ khoá TypeOf X Is…TextBox, ListBox, ComboBox, CheckBox, Frame,
Label, Form, adodc,…..
• Khi biến chạy X đang trỏ đến một loại điều khiển nào đó thì có thể sử dụng tất
cả các thuộc tính, phương thức của đối tượng thông qua biến chạy X. Ví dụ
nếu TypeOf X is ListBox là đúng (True) thì ta có thể truy cập đến thuộc tính
Text và name của Listbox bằng cách viết X.Text, X.Name hay có thể truy cập
đến phương thức AddItem bằng cách viết X.AddItem ….
• Việc duyệt các phần tử trong một tập hợp rất hay được sử dụng và hữu ích,
do vậy chúng ta cần sử dụng tốt cấu trúc duyệt này.
• Việc xoá trắng các Textbox, ComboBox theo cách trên không phục thuộc vào
số lượng và tên của các phần tử trong Form, do vậy không phải sửa đổi
chương trình nguồn khi thay đổi các phần tử trên form.
Bài 3
a. Giao diện và thiết lập thông số cho các điều khiển.
Hình 2.27 - Đặt tên cho các điều khiển.
b. Hướng dẫn: Sử dụng phương thức AddItem để thêm và phương thức
RemoveItem để loại bỏ một mục khỏi danh sách. Ngoài ra còn có thể dùng thuộc
tính ListIndex để lấy về chỉ số của phần tử đang được chọn.
c. Chương trình nguồn
Form1.frm
Private Sub cmdThem_Click()
lstDanhSach.AddItem txtHoTen.Text, 0 '/// 0 = Thªm vµo ®Çu danh s¸ch
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Private Sub cmdXoa_Click()
If lstDanhSach.ListIndex < 0 Then
lstDanhSach.RemoveItem lstDanhSach.ListIndex
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 52
Else
MsgBox "B¹n ph¶i chän mét môc tr−íc khi xo¸ !"
End If
End Sub
Private Sub cmdThoat_Click()
End
End Sub
d. Ghi chú:
• Trong điều khiển Listbox, mục đầu tiên có chỉ số là 0. Mục cuối cùng có chỉ số
là ListCount – 1.
• Thuộc tính Text cho ta giá trị của phần tử hiện hành (đang được chọn)
• Thuộc tính List(i) sẽ cho ta giá trị của phần tử có chỉ số là i
• Mặc định phương thức AddItem của điều khiển Listbox thêm mục mới vào
cuối danh sách, do vậy nếu muốn thêm vào đầu danh sách thì cần truyền giá
trị 0 (vị trí đầu tiên) vào phương thức AddItem.
• Phương thức RemoveItem dùng để loại bỏ 1 mục khỏi danh sách. Phần tử
hiện đang được chọn có chỉ số là ListIndex.
• Khi danh sách rỗng thì thuộc tính ListCount = 0 và ListIndex = - 1
• Có thể chèn một số mục vào trong Listbox hay ComboBox trong lúc thiết kế
bằng cách nhập vào thuộc tính "List" (Xem hình 23). Tại đây nếu muốn nhiều
mục thì sau mỗi lần nhập, nhấn tổ hợp phím Ctrl+Enter:
Hình 2.28 - Nhập liệu cho Listbox trong lúc thiết kế (Nhấn Ctrl-Enter để xuống dòng)
Bài 4
a. Thiết kế giao diện và thiết lập thông số cho các điều khiển trên Form
Hình 2.29 - Đặt tên và thuộc tính cho các điều khiển trên Form
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 53
b. Hướng dẫn: Sử dụng thuộc tính Selected(i) để kiểm tra liệu mục chỉ số i có được
chọn (Check) hay không. Nếu có thì gọi phương thức RemoveItem để xóa. Lưu ý
rằng, khi xoá đi thì số phần tử trong danh sách sẽ bị thay đổi, do vậy không nên sử
dụng vòng lặp For mà nên sử dụng vòng lặp Do While. Đồng thời khi duyệt thì nên
duyệt từ cuối danh sách (từ phần tử có chỉ số lớn nhất là ListCount – 1).
c. Chương trình nguồn.
Option Explicit
Private Sub cmdThem_Click()
lstDanhSach.AddItem txtHoTen.Text, 0
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Private Sub cmdXoa_Click()
Dim i As Integer
i = lstDanhSach.ListCount – 1 '/// Bắt đầu duyệt từ phần tử cuối cùng
Do While i >= 0
If lstDanhSach.Selected(i) = True Then lstDanhSach.RemoveItem i
i = i - 1
Loop
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Private Sub cmdThoat_Click()
End
End Sub
c. Chú ý: Với cấu trúc If…Then, nếu sau Then chỉ có một lệnh thì có thể viết câu
lệnh đó cùng dòng với lệnh If…Then mà không cần phải có lệnh kết thúc End If.
Bài 5
a. Giao diện và thiết lập thuộc tính cho các điều khiển trên Form
Hình 2.30 - Đặt thuộc tính cho các điều khiển
b. Hướng dẫn: Sử dụng vòng lặp và kiểm tra từng mục xem có được chọn hay
không, nếu được chọn thì thêm vào danh sách lstNguoiNhan. ở đây vì nội dung
trong lstDanhSach không bị thay đổi nên có thể sử dụng bất kỳ cấu trúc lặp nào.
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 54
c. Chương trình nguồn
Option Explicit
Private Sub cmdCC_Click()
Dim i As Integer
For i = 0 To lstDanhSach.ListCount - 1
If lstDanhSach.Selected(i) = True Then '/// NÕu mục i ®−îc chän th× thªm.
lstNguoiNhan.AddItem lstDanhSach.List(i)
End If
Next
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Private Sub cmdXoa_Click()
If lstNguoiNhan.ListIndex >= 0 Then
lstNguoiNhan.RemoveItem lstNguoiNhan.ListIndex
End If
End Sub
d. Ghi chú:
• lstDanhSach.List(i) : lấy nội dung của mục i trong lstDanhSach
• If lstNguoiNhan.ListIndex >= 0 Then…để đảm bảo chỉ xoá khi một mục được chọn
• Khi đặt thuộc tính MultiSelect là 2 – Extended thì người dùng có thể chọn
nhiều mục liền hoặc rời nhau của ListBox bằng chuột và bàn phím.
Bài 6
a. Giao diện và đặt thuộc tính cho các điều khiển trên Form
Hình 2.31 – Giao diện và đặt tên cho điều khiển
b. Hướng dẫn Có rất nhiều phương pháp để đưa phần tên lên trước họ đệm, tuy
nhiên trong bài này xin giới thiệu một cách khác thông qua hàm xử lý xâu ký tự
SPLIT. Việc tách Tên lên trước của một xâu S có thể mô tả như ví dụ sau:
"Nguyen Van An" Nguyen Van An
An Nguyen Van
Mảng Xâu vào cần đảo tên
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 55
- Trước tiên xâu vào sẽ được phân tách và lấy từng từ bên trong nó nhờ hàm Split
- Tiếp theo là đảo phần tử cuối cùng trong mảng lên đầu danh sách.
c. Chương trình nguồn
Option Explicit
Function DaoTen(HoTen As String) As String
Dim i As Integer, KetQua As String
Dim S
KetQua = ""
S = Split(HoTen, Chr(32))
KetQua = S(UBound(S))
For i = 0 To UBound(S) - 1
KetQua = KetQua & Chr(32) & S(i) '/// Chr(32) là ký tự trắng
Next
DaoTen = KetQua
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Private Sub cmdDao_Click()
Dim i As Integer
lstMoi.Clear
For i = 0 To lstNguoiDung.ListCount - 1
lstMoi.AddItem DaoTen(lstNguoiDung.List(i))
Next
End Sub
Bài 7
a. Đặt thuộc tính cho các điều khiển trên form
Hình 2.32 – Giao diện và đặt tên cho các điều khiển
b. Hướng dẫn
Khi một xâu chứa nhiều phần tử được cách nhau bởi một ký tự hay một xâu con
khác, ta có thể dễ dàng tách chúng ra thành các phần tử riêng biệt nhờ hàm Split
trong VB. Cú pháp của hàm Split như sau: Split (Xâu cần tách S, Xâu phân cách các
phần tử trong S). Kết quả trả về của hàm là một mảng. Để lưu mảng này, ta cần sử
dụng một biến kiểu Variant như trong chương trình mẫu sau đây.
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 56
c.Chương trình mẫu
Option Explicit
'// Viết lệnh cho thủ tục sự kiện click chuột lên nút Tách
Private Sub cmdTach_Click()
Dim i As Integer, S As Variant
S = Split(txtDiaChi.Text, ";") '/// Tách xâu trong Textbox được ngăn cách bởi ";"
lstKetQua.Clear '/// Xoá Listbox để lưu kết quả
For i = 0 To UBound(S) '/// Chèn các phần tử trong mảng S vào Listbox
lstKetQua.AddItem S(i)
Next
End Sub
d. Ghi chú:
• Xâu phân cách (Tham số thứ 2 của hàm Split) không nhất thiết là 1 ký tự mà
có thể là một xâu lớn hơn 1 ký tự.
• Hàm Ubound(S) trả về số phần tử hiện có trong mảng S.
• Trong thực tế cần phải xử lý thêm khi nhận các kết quả từ việc tách xâu S.
Chẳng hạn như có thể người dùng gõ dấu cách sau dấu chấm phảy hoặc có 2
dấu chấm phảy liền nhau v.v… thì khi đó cần phải cắt các dấu trắng bằng hàm
TRIM trước, sau đó kiểm tra xem không rỗng thì mới nhận kết quả.
Bài 8.
a. Giao diện và đặt tên cho các điều khiển trên form
Hình 2.33 – Giao diện chương trình và đặt tên cho các điều khiển
b. Hướng dẫn
Theo mặc định, VB so sánh hai chuỗi ký tự từ trái qua phải - tức là sắp xếp Họ sau
đó mới đến tên- do vậy để sắp xếp theo thứ tự ưu tiên Tên trước thì cần phải cắt
phần tên và ghép lên đầu. Việc cắt tên có rất nhiều cách, nhưng ở đây ta hoàn toàn
có thể áp dụng hàm Split như trong các bài tập trước đây. Để cho thuận tiện, ở đây
ta xây dựng một hàm DaoTen, có nhiệm vụ đảo phần "Tên" lên trước Họ.
BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN Biên soạn: Bộ môn CNPM–ĐHSPKT HY 2005
Trang 57
c. Chương trình mẫu
Option Explicit
'/// Hàm này có chức năng cắt phần tên (ở cuối) đưa lên đầu (tên lên trước họ)
Function DaoTen(HoTen As String) As String
Dim S As Variant, i As Integer, KetQua As String
S = Split(HoTen, Chr(32))
KetQua = S(UBound(S)) '///Lấy phần tử cuối ⇔ Tên
For i = 0 To UBound(S) – 1 '/// Ghép thêm phần "Họ" và "Đệm"
KetQua = KetQua & Chr(32) & S(i)
Next
DaoTen = KetQua '/// Trả kết quả về cho hàm
End Function
'-----------------------------------------------------------------------------------------------------------------------------
'///Thực hiện sắp xếp danh sách trong lstDSSV_SapXep khi người dùng click "Sắp xếp theo TÊN"
Private Sub cmdSapXep_Click()
Dim i As Integer, j As Integer, TG As String
lstDSSV_SapXep.Clear
'/// Copy các mục trong lstDSSV sang listbox l stDSSV_SapXep
For i = 0 To lstDSSV.ListCount - 1
lstDSSV_SapXep.AddItem Trim(lstDSSV.List(i))
Next
'/// Thực hiện sắp xếp danh sách trong lstDSSV_SapXep sử dụng hàm DaoXau.
For i = 0 To lstDSSV_SapXep.ListCount - 2
For j = i + 1 To lstDSSV_SapXep.ListCount - 1
If DaoTen(lstDSSV_SapXep.List(i)) > DaoTen(lstDSSV_SapXep.List(j)) Then
TG = lstDSSV_SapXep.List(i)
lstDSSV_SapXep.List(i) = lstDSSV_SapXep.List(j)
lstDSSV_SapXep.List(j) =
Các file đính kèm theo tài liệu này:
- pages_from_bai_tap_lap_trinh_vb_dhspkthy_2.pdf