• Thứ Sáu, 16/11/2007 08:21 (GMT+7)

    Lập trình liệt kê tương ứng Listbox trong VB6

    Câu hỏi :

    1. Tôi có một đoạn code hiện nội dung file *.txt vào textbox như sau:
     Private Sub Form_Load()
     Dim FileLength
     Open “D:\karthik\testfiles\bctest1.txt” For Input As #1
     FileLength = LOF(1)
     var1 = Input(FileLength, #1)
     Text1.Text = var1
     Close #1
     End Sub
     Tuy nhiên nội dung trong file .txt không hiển thị xuống dòng được. Xin hỏi cách xử lý xuống dòng và cuộn xuống để xem tiếp nội dung phía dưới.

     2. Ví dụ có Combo1 gồm “Black Eyed Peas” và “Eminem”, Combo2 và Text1. Xin hướng dẫn viết code để khi người dùng dropdown danh sách của Combo1, chọn “Black Eyed Peas” thì danh sách của Combo2 sẽ gồm “Bebot” và “My hump”, còn chọn “Eminem” thì Combo2 có danh sách gồm “Mocking Bird” và “Smack That”. Nếu Chọn “Bebot” trong Combo2 thì ở ô Text1 sẽ hiện ra lời bài hát tương ứng (tương tự với 3 bài còn lại).
     



    Trả lời :

    1. Textbox của VB 6.0 có thể hiển thị văn bản trên 1 hay nhiều hàng, ở chế độ mặc định nó chỉ hiển thị văn bản trên 1 hàng, nếu muốn hiển thị nội dung trên nhiều hàng, bạn cần thiết lập lại giá trị thuộc tính MultiLine về True. Hơn nữa nếu nội dung văn bản dài hơn nhiều so với kích thước ngang/dọc của TextBox, bạn có thể hiển thị Scrollbars kèm theo Textbox. Để hiển thị scrollbar ngang/dọc, bạn hãy thiết lập giá trị thuộc tính Scrollbars về 1/2/3 (ngang/dọc/cả hai). Đoạn code VB mà bạn liệt kê cho phép mở file văn bản, đọc toàn bộ văn bản của file vào biến var1, sau đó gán nội dung biến var1 vào thuộc tính Text của TextBox để hiển thị toàn bộ văn bản lên TextBox. Nếu 2 thuộc tính MultiLine và Scrollbars của TextBox đã được thiết lập giá trị phù hợp như trên thì nội dung file văn bản sẽ hiển thị đúng trên Textbox, mỗi dòng văn bản được hiển thị trên 1 dòng của TextBox.

    2. Yêu cầu của bạn được đặc tả lại như sau: bạn có n=2 nhóm bài hát, mỗi nhóm có m bài hát, mỗi bài hát có nội dung lời kèm theo. Bạn muốn dùng ComboBox tên là Combo1 để hiển thị danh sách tên nhóm bài hát, khi người dùng chọn nhóm nào thì hiển thị danh sách tên các bài hát thuộc nhóm đó vào ComboBox tên là Combo2, và khi người dùng chọn 1 bài hát trong nhóm hiện hành thì hiển thị nội dung lời bài hát (trên nhiều dòng) lên TextBox có tên là Text1.

    Để giải quyết yêu cầu của bạn dễ dàng và tổng quát, về mặt dữ liệu, bạn nên dùng biến record và dãy để quản lý mối quan hệ giữa các dữ liệu, thí dụ bạn khai báo 2 kiểu dữ liệu sau đây:
     
    ‘miêu tả kiểu lưu bài nhạc
     Private Type SongInfo
     name As String
     content As String
     End Type
     ‘miêu tả kiểu lưu nhóm bài nhạc
     Private Type SongGroup
     name As String
     Songs(0 To 20) As SongInfo ‘mỗi nhóm tối đa 20 bài
     End Type
     ‘định nghĩa biến dữ liệu
     Dim SongGroups(0 To 10) As SongGroup
     Biến SongGroups là 1 dãy có 11 phần tử được dùng để chứa tối đa 10 nhóm nhạc (chúng tôi dùng phần tử cuối để đánh dấu kết thúc nhóm). Mỗi nhóm nhạc có tên và danh sách tối đa 20 bài nhạc (thuộc kiểu SongInfo), mỗi bài nhạc có tên và nội dung lời.
     Về mặt xử lý sự kiện, bạn cần khai báo 2 thủ tục xử lý sự kiện Click chọn phần tử cho 2 ComboBox. Cụ thể đoạn code VB để giải quyết vần đề bạn yêu cầu như sau:
     ‘miêu tả kiểu lưu bài nhạc
     Private Type SongInfo
     name As String
     content As String
     End Type
     ‘miêu tả kiểu lưu nhóm bài nhạc
     Private Type SongGroup
     name As String
     Songs(0 To 20) As SongInfo ‘mỗi nhóm tối đa 20 bài
     End Type
     ‘định nghĩa biến dữ liệu
     Dim SongGroups(0 To 10) As SongGroup
     Dim igroup As Integer
     
     ‘thủ tục khởi động dữ liệu
     Private Sub Form_Load()
     ‘thiết lập danh sách nhóm bài nhạc
     SongGroups(0).name = “Black Eyed Peas”
     SongGroups(1).name = “Eminem”
     SongGroups(2).name = “”
     ‘thiết lập danh sách bài nhạc của nhóm 1
     SongGroups(0).Songs(0).name = “Bebot”
     SongGroups(0).Songs(1).name = “My hump”
     SongGroups(0).Songs(2).name = “”
     ‘nội dung bài nhạc có thể đọc từ file vào
     SongGroups(0).Songs(0).content = “Noi dung hang 1” & vbCrLf & “Noi dung hang 2”
     SongGroups(0).Songs(1).content = “Noi dung dong 1” & vbCrLf & “Noi dung dong 2”
     
     ‘thiết lập danh sách bài nhạc của nhóm 2
     SongGroups(1).Songs(0).name = “Mocking Bird”
     SongGroups(1).Songs(1).name = “Smack That”
     SongGroups(1).Songs(2).name = “”
     SongGroups(1).Songs(0).content = “Noi dung row 1” & vbCrLf & “Noi dung row 2”
     SongGroups(1).Songs(1).content = “Value hang 1” & vbCrLf & “Value hang 2”
     ‘thiết lập danh sách nhóm cho Combo1
     i = 0
     While SongGroups(i).name <> “”
     Combo1.AddItem SongGroups(i).name
     i = i + 1
     Wend
     End Sub
     
     ‘thủ tục xử lý chọn trên Combo1
     Private Sub Combo1_Click()
     ‘lấy chỉ số nhóm được người dùng chọn
     igroup = Combo1.ListIndex
     ‘xóa nội dung của Combo2
     Combo2.Clear
     ‘thiết lập danh sách bài nhạc cho nhóm được chọn
     i = 0
     While SongGroups(igroup).Songs(i).name <> “”
     Combo2.AddItem SongGroups(igroup).Songs(i).name
     i = i + 1
     Wend
     End Sub
     
     ‘thủ tục xử lý chọn trên Combo2
     Private Sub Combo2_Click()
     Dim idx As Integer
     ‘lấy chỉ số bài nhạc được người dùng chọn
     idx = Combo2.ListIndex
     ‘hiển thị lời bài nhạc được người dùng chọn
     Text1.Text = SongGroups(igroup).Songs(idx).content
     End Sub
     

    Chuyên mục: Lập trình