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

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

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

Переносимые вкладки в TabControl

Автор: Nick Thissen | добавлено: 06.03.2010, 16:53 | просмотров: 2853 (1+) | комментариев: 0 | рейтинг: *x0
Пример показывает, как можно переносить мышкой вкладки в контроле TabControl.

Код

Imports System.Collections.ObjectModel
 
'*******************************************************************
'Переносимые вкладки в TabControl
'http://vbnet.su - Visual Basic .NET. Статьи. Примеры. Форум.
'*******************************************************************
 
Public Class dragTabCtrl
 
  Public Sub New()
 
    ' This call is required by the Windows Form Designer.
    InitializeComponent()
 
    ' Add any initialization after the InitializeComponent() call.
    Me.AllowDrop = True
  End Sub
 
  '// Overrides the DragOver event
  Protected Overrides Sub OnDragOver(ByVal drgevent As System.Windows.Forms.DragEventArgs)
    MyBase.OnDragOver(drgevent)
 
    'Get the coords of our mouse in Client coordinates
    Dim pt As Point = PointToClient(New Point(drgevent.X, drgevent.Y))
 
    'Get the Tab
    Dim hoverTab As TabPage = GetTabPageFromPoint(pt)
 
    If hoverTab IsNot Nothing Then
 
      If drgevent.Data.GetDataPresent(GetType(TabPage)) Then
 
        drgevent.Effect = DragDropEffects.Move
 
        'Get the dragged tab
        Dim dragTab As TabPage = DirectCast(drgevent.Data.GetData(GetType(TabPage)), TabPage)
 
        'Get the tabindex of the dragged tab and the hovered tab
        Dim dragIndex As Integer = FindIndex(dragTab)
        Dim dropIndex As Integer = FindIndex(hoverTab)
 
        'If they are the same we don't need to do anything
        If dragIndex <> dropIndex Then
 
          'Add each tabpage, except the dragged tab (!), to a new tabpage collection
          Dim pages As New Collection(Of TabPage)
          For i As Integer = 0 To Me.TabPages.Count - 1
 
            If i <> dragIndex Then
              pages.Add(Me.TabPages(i))
            End If
 
          Next
 
          'We now have a collection of all our tabs except the dragged tab
          'So insert the dragged tab at the appropriate index
          pages.Insert(dropIndex, dragTab)
 
          'Clear and re-add the pages
          TabPages.Clear()
          TabPages.AddRange(pages.ToArray())
 
          'Select the dragged tab
          Me.SelectedTab = dragTab
        End If
 
      Else
        drgevent.Effect = DragDropEffects.None
      End If
 
    End If
  End Sub
 
  Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
    MyBase.OnMouseDown(e)
 
    Dim pt As Point = New Point(e.X, e.Y)
    Dim tp As TabPage = GetTabPageFromPoint(pt)
 
    If tp IsNot Nothing Then
      DoDragDrop(tp, DragDropEffects.All)
    End If
  End Sub
 
  '// Returns the TabPage whose TabHeader is located at the point 'pt'
  Private Function GetTabPageFromPoint(ByVal pt As Point) As TabPage
    Dim tp As TabPage = Nothing
 
    For i As Integer = 0 To Me.TabPages.Count - 1
      If Me.GetTabRect(i).Contains(pt) Then
        tp = Me.TabPages(i)
        Exit For
      End If
    Next
 
    Return tp
  End Function
 
  '// Returns the index of the TabPage
  Private Function FindIndex(ByVal page As TabPage) As Integer
    Dim rslt As Integer = -1
    For i As Integer = 0 To Me.TabPages.Count - 1
      If Me.TabPages(i) Is page Then
        rslt = i
        Exit For
      End If
    Next
    Return rslt
  End Function
 
End Class
Файлы DragTabControl.zip (17,11 Кб)
Об авторе

Nick Thissen

Нет информации об авторе...
Nick Thissen
Другие примеры этого автора (всего: 3)
Последние комментарии (всего: 0)

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


Нет комментариев...

Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Реклама
Счетчики