• Thứ Tư, 07/01/2004 16:26 (GMT+7)

    "Kéo" và "thả" với Visual Basic.


    Trong nhiều ứng dụng Windows, người dùng có thể thực hiện “kéo” và “thả” (drag and drop) các đối tượng qua lại giữa hai hộp danh sách, bài viết này giới thiệu một cách làm đơn giản trong Visual Basic cho phép thực hiện tương tự.
    Tạo một project trong Visual Basic, thêm hai ListBox (lstDraggedItems, lstDroppedItems) và một TextBox (txtItem) vào Form chính (frmMain).
    Nhập đoạn mã sau cho sự kiện Load của Form

    Private Sub Form_Load()
     
    ‘Thiết lập thuộc tính Visible của TextBox thành False.
     
    txtItem.Visible = False
     
    ‘Thêm các mục cho lstDraggedItems

     lstDraggedItems.AddItem “Main Board”
      
    lstDraggedItems.AddItem “Proccessor”
      
    lstDraggedItems.AddItem “Monitor”
      
    lstDraggedItems.AddItem “RAM”
       
    lstDraggedItems.AddItem “Hard Disk”
       
    lstDraggedItems.AddItem “Floppy drive”
       
    lstDraggedItems.AddItem “CD-ROM”
       
    lstDraggedItems.AddItem “Mouse”
       
    lstDraggedItems.AddItem “Keyboard”
      
    lstDraggedItems.AddItem “Speaker”
    End Sub

    Trong sự kiện MouseDown của Listbox lstDraggedItems thêm đoạn mã sau, ở đây có sử dụng thêm biến draglst để kiểm tra khi kéo và thả tại cùng một hộp danh sách.

     Dim draglst As Boolean

    Private Sub lstDraggedItems_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

    ‘ Kiểm tra nếu hết số mục chọn bằng 0 thì không thực hiện

    If lstDraggedItems.ListCount = 0 Then

    Exit Sub

    End If

    draglst = True

    ‘Gán nội dung và tọa độ cho TextBox txtItem và thực hiện Drag.

    txtItem.Text = lstDraggedItems.Text

    txtItem.Top = Y + lstDraggedItems.Top

    txtItem.Left = X + lstDraggedItems.Left

    txtItem.Drag

    End Sub

     

    Trong sự kiện DragDrop của ListBox lstDroppedItems thêm đoạn mã sau:

     

    Private Sub lstDroppedItems_DragDrop(Source As Control, X As Single, Y As Single)

    ‘Kiểm tra việc kéo thả tại cùng một hộp danh sách.

    If Not draglst Then

    Exit Sub

    End If

    ‘Thêm mục mới vào ListBox lstDroppedItems.

    lstDroppedItems.AddItem txtItem.Text

    ‘Xóa mục cũ trong ListBox lstDraggedItems.

    lstDraggedItems.RemoveItem (lstDraggedItems.ListIndex)

    End Sub

     

    Để cho phép kéo và thả theo chiều ngược lại, bạn chỉ cần viết thêm mã lệnh sự kiện MouseDown cho lstDroppedItems và sự kiện DragDrop cho lstDraggedItems.

     

    Private Sub lstDroppedItems_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

    If lstDroppedItems.ListCount = 0 Then

    Exit Sub

    End If

    draglst = False

    txtItem.Text = lstDroppedItems.Text

    txtItem.Top = Y + lstDroppedItems.Top

    txtItem.Left = X + lstDroppedItems.Left

    txtItem.Drag

    End Sub

    Private Sub lstDraggedItems_DragDrop(Source As Control, X As Single, Y As Single)

    If draglst Then

    Exit Sub

    End If

    lstDraggedItems.AddItem txtItem.Text

    lstDroppedItems.RemoveItem (lstDroppedItems.ListIndex)

    End Sub

    Nguyễn Đỗ Văn
    Lớp Tin Học K34 - Học Viện Kỹ Thuật Quân Sự - Cầu Giấy - Hà Nội
    ngdovan@yahoo.com

    ID: A0301_91