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

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 !.

pdf42 trang | Chia sẻ: oanh_nt | Lượt xem: 1461 | Lượt tải: 0download
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:

  • pdfpages_from_bai_tap_lap_trinh_vb_dhspkthy_2.pdf
Tài liệu liên quan