• Thứ Năm, 13/04/2006 09:17 (GMT+7)

    Lập trình kéo thả trong VB.NET

    Câu hỏi :
    Tôi viết chương trình VB .Net cho phép kéo-thả một số tập tin trên màn hình desktop vào 1 label của form ứng dụng, 1 listbox khác trong form sẽ hiển thị các tập tin kéo-thả vào. Tuy nhiên khi chạy chương trình listbox chỉ hiển thị được 1 tập tin. Hàm xử lý sự kiện drag-drop cho label như sau:
    Private Sub Label9_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Label9.DragDrop
    Dim files() As String = e.Data.GetData(DataFormats.FileDrop, True)
      lstNguon.Items.Add(files(0).ToString)
    End Sub


    Trả lời :
    Sở dĩ chỉ có 1 tập tin được hiển thị trong listbox là vì bạn chỉ viết có 1 lệnh để 'add' file đầu tiên trong danh sách vào listbox. Để hiển thị hết các file được chọn trong hoạt động drag-drop, bạn nên viết lệnh lặp để 'add' từng file trong danh sách vào listbox. Hàm xử lý sự kiện dragdrop cho label được viết lại như sau (có kiểm tra xem dữ liệu dragdrop có phải là danh sách các file không trước khi 'add' chúng vào listbox):
    Private Sub Label9_DragDrop (ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop
       'kiểm tra xem có file dữ liệu dragdrop là danh sách file không
       If e.Data.GetDataPresent(DataFormats.FileDrop) Then
          Dim i As Integer
          Dim files() As String = e.Data.GetData(DataFormats.FileDrop, True)
          ' Lặp 'add' từng tên file bào listbox
          For i = 0 To files.Length - 1
              lstNguon.Items.Add(files(i))
          Next
       End If
    End Sub
    Ngoài ra bạn nên viết thêm hàm xử lý sự kiện DragEnter cho label tương ứng như sau:
    Private Sub Label9_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragEnter
       If e.Data.GetDataPresent(DataFormats.FileDrop) Then
          e.Effect = DragDropEffects.All
       End If
    End Sub

    Lưu ý là phải thiết lập thuộc tính AllowDrop của label về giá trị True thì dragdrop mới hoạt động với label tương ứng.
    Chuyên mục: Lập trình