Danh mục

Visual Basic 6 Vovisoft part 15

Số trang: 7      Loại file: pdf      Dung lượng: 178.42 KB      Lượt xem: 7      Lượt tải: 0    
Thư viện của tui

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Tham khảo tài liệu visual basic 6 vovisoft part 15, công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Nội dung trích xuất từ tài liệu:
Visual Basic 6 Vovisoft part 15Bạn có thể download chương trình nầy (SortedList.zip) để có luôn cả project.Trong bài tới ta sẽ học thêm các áp dụng khác của ListBox. Chương Bảy - Dùng List Controls (bài thứ hai)ListboxCách dùng MultiSelectCho đến giờ User click vào Listbox để chọn chỉ một Item. Khi một Item được chọnthì hàng ấy trở nên highlighted với background màu xanh đậm. Nếu kế đó ta clickmột hàng khác thì hàng cũ được display trở lại bình thường và hàng mới đuợcselected sẽ trở nên highlighted.Listbox cho ta có thể select nhiều Items cùng một lúc bằng cách set PropertyMultiSelect = ExtendedÐối với MultiSelected Listbox, ta chọn một nhóm Items liên tục bằng cách clickItem đầu rồi nhấn nút Shift trong khi click Item cuối. Ta cũng có thể tiếp tụcSelect/Deselect thêm bằng cách ấn nút Ctrl trong khi click các Items. Nếu ta clickmột Item chưa được selected thì nó sẽ trở nên selected (highlighted màu xanh), nếuta click một Item đã được selected rồi thì nó sẽ trở nên deselected (không còn màuxanh nữa). Thí dụ trong program bạn click Peter Jones, kế đó ấn nút Shift trongkhi click Sue Rose, kế đó buông nút Shift ra để ấn nút Ctrl trong khi click KevinWhite, bạn sẽ có những selected Items như trong hình dưới đây:Ngoài ra bạn cũng có thể MultiSelect nhiều Items trong một Listbox bằng cáchdùng mouse để drag, tức là bạn click lên Item đầu rồi tiếp tục đè mousebuttontrong khi kéo mousepointer đến Item cuối cùng mới buông mousebutton ra.Cái Bug ác ônBây giờ giả sử ta muốn delete tất cả những Items vừa được selected (highlighted).Bạn hãy đặt một CommandButton mới tên CmdDeleteSelectedItems vào Form. Tasẽ dùng Event Click của Button nầy để delete những selected Items. Một selectedItem của lstNames sẽ có property Selected của nó bằng True. Tức là nếu Item thứba (ListIndex=2) được selected thì ta có lstNames.Selected(2) = True. Ta có ýđịnh sẽ iterate through mọi Items của lstNames, để xem Item nào được selected thìmình sẽ delete nó bằng cách dùng method RemoveItem. Ta sẽ viết code cho SubCmdDeleteSelectedItems_Click() như sau:Private Sub CmdDeleteSelectedItems_Click() Dim i For i = 0 To lstNames.ListCount - 1 If lstNames.Selected(i) = True Then lstNames.RemoveItem i End If NextEnd SubBạn hãy chạy chương trình, click Load để populate lstNames với các tên đọc từtext file, rồi MultiSelect các tên như trong hình phía trên. Kế đó click buttonDeleteSelectedItems. Program sẽ té (crash) và có hình như sau:Nếu bạn click nút Debug, program sẽ ngừng tại dòng code gặp error và highlightnó với background màu vàng. Ðể mousepointer lên trên chữ i củalstNames.Selected(i), VB6 sẽ popup message nho nhỏ i = 4.Bạn để ý thấy trong hình lúc nầy lstNames chỉ còn có 4 Items (Ron, Trevor, Johnvà Alan), vì các Items kia đã bị removed.Bạn có biết tại sao program crashed không? Ðó là vì program đang refer đếnproperty Selected của Item thứ năm ( ArrayIndex i = 4) của lstNames trong khilstNames bây giờ chỉ còn có 4 Items. Vì vậy program crashed với messageRuntime error 381: Invalid property array index.Thủ phạm của cái Bug ác ôn nầy là statement For i = 0 To lstNames.ListCount -1. VB6 chỉ tính value của lstNames.ListCount -1 một lần lúc khởi sự For..Loopmà thôi (tức là lstNames.ListCount -1 = 6), nó không lưu ý là ListCount giảmvalue mỗi lần một Item bị Removed. Ngoài ra ta thấy tên Trevor Kennedy cũngkhông bị removed, tức là nó bị lọt sổ nếu ta dùng For..Loop theo cách nầy. Lý dolà sau khi ta Remove Peter Jones (Item thứ hai), Trevor Kennedy bị đẩy lên vàtrở thành Item thứ hai mới. Kế đó ta increment value của i thành 2 rồi process Itemthứ ba, tức là Sue Rose, nên Trevor Kennedy không hề được processed.Bạn có thể download program có bug nầy để chạy thử cho biết.Sub CmdDeleteSelectedItems_Click cần phải được viết lại để dùng While ... Loop,thay vì For...Loop. Trong While...Loop, lstNames.ListCount - 1 được evaluated(tính) để test ở mỗi iteration. Khi nào ta Remove một Item thì ta không increment i,vì Item ngay dưới removed Item được đẩy lên. Listing mới như sau:Private Sub CmdDeleteSelectedItems_Click() Dim i i = 0 Initialise value of i to start from first Item Note that lstNames.ListCount is evaluated freshly at each iteration Do While i Dưới đây là listing của Function HexDisplay để convert từ ASCII string raHexadecimal string.Function HexDisplay(InASCII) As String Convert an ASCII string to HEX string Dim InLen, i, msg, HexStr InLen = Len(InASCII) Get length of input string Convert each ASCII character to Hex For i = 1 To InLen HexStr = Hex(Asc(Mid(InASCII, i, 1))) If HEX has only one digit then prefix it with 0 If Len(HexStr) = 1 Then HexStr = 0 & HexStr msg = msg + HexStr & Next i HexDisplay = msg Return result string for FunctionEnd FunctionTrong program nầy, khi Listbox đạt đến 1000 items thì mỗi lần một hàng mới đượcthêm vào, hàng cũ nhất sẽ bị ...

Tài liệu được xem nhiều: