Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Исходные коды - jmcilhinney -

Visual Basic .NET - Элементы управления Windows

Все примеры / Интерфейс / Элементы управления Windows

Простой пример Drag & Drop

Автор: jmcilhinney | добавлено: 06.03.2010, 17:01 | просмотров: 4750 (1+) | комментариев: 1 | рейтинг: *x8
Пример показывает, как можно перетаскивать мышкой элементы из одного списка (ListBox) в другой.

Код

'*******************************************************************
'Простой пример Drag & Drop
'Для работы примера, разместите на форме два ListBox.
'http://vbnet.su - Visual Basic .NET. Статьи. Примеры. Форум.
'*******************************************************************
 
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
  'включаем Drga'n'Drop
  Me.ListBox1.AllowDrop = True
  Me.ListBox2.AllowDrop = True
  'Заполняем списки каким-то данными
  Me.ListBox1.Items.AddRange(New String() {"List 1, Item 1", _
                                           "List 1, Item 2", _
                                           "List 1, Item 3", _
                                           "List 1, Item 4", _
                                           "List 1, Item 5"})
  Me.ListBox2.Items.AddRange(New String() {"List 2, Item 1", _
                                           "List 2, Item 2", _
                                           "List 2, Item 3", _
                                           "List 2, Item 4", _
                                           "List 2, Item 5"})
End Sub
 
Private Sub ListBox_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles ListBox1.MouseDown, ListBox2.MouseDown
  Dim source As ListBox = DirectCast(sender, ListBox)
  For index As Integer = 0 To source.Items.Count - 1
    If source.GetItemRectangle(index).Contains(e.Location) Then
      source.DoDragDrop(source, DragDropEffects.Move)
      Exit For
    End If
  Next
End Sub
 
Private Sub ListBox_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListBox1.DragEnter, ListBox2.DragEnter
  Dim source As ListBox = DirectCast(sender, ListBox)
  If e.Data.GetDataPresent("System.Windows.Forms.ListBox", False) AndAlso _
     e.Data.GetData("System.Windows.Forms.ListBox", False) IsNot source Then
    e.Effect = DragDropEffects.Move
  End If
End Sub
 
Private Sub ListBox_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListBox1.DragDrop, ListBox2.DragDrop
  Dim source As ListBox = DirectCast(sender, ListBox)
 
  If e.Data.GetDataPresent("System.Windows.Forms.ListBox", False) Then
    Dim data As ListBox = DirectCast(e.Data.GetData("System.Windows.Forms.ListBox", False), ListBox)
    If data IsNot source Then
      Dim item As Object = data.SelectedItem
      data.Items.Remove(item)
      Dim location As Point = source.PointToClient(New Point(e.X, e.Y))
      Dim dropIndex As Integer = -1
      For index As Integer = 0 To source.Items.Count - 1
        If source.GetItemRectangle(index).Contains(location) Then
          dropIndex = index
          Exit For
        End If
      Next
      If dropIndex = -1 Then
        source.Items.Add(item)
      Else
        source.Items.Insert(dropIndex, item)
      End If
    End If
  End If
End Sub
Об авторе

jmcilhinney

Нет информации об авторе...
jmcilhinney
Последние комментарии (всего: 1)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.

Можно улучшить поиск выбранного элемента в ListBox вместо:
For index As Integer = 0 To source.Items.Count - 1
If source.GetItemRectangle(index) .Contains(e.Location) Then
source.DoDragDrop(source, DragDropEffects.Move)
Exit For
End If
Next
заменить на одну строку
Dim index As Integer = source.IndexFromPoint(e.X, e.Y)
Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Люди на Kbyte.Ru
Реклама
Счетчики