Barra de Herramientas Flotante
Toolbar flotting (VB.NET)

Fecha: 09/Abr/2005 (03/04/2005)
Autor: Carlos A. Reyes (creyes@uol.com.ar)

 


El siguiente artículo tiene la misión de mostrar como realizar una sencilla barra de Herramienta (ToolBar) flotante dentro de un formulario(WinForm).

Para el ejemplo se ha utilizado un Form (Form1), un ToolBar (ToolBar1) y un ImageList (imgImagenes) que se lo vinculó con la ToolBar para poder mostrar los botones de la misma con gráficos.

A continuación sigue código en Visual Basic:

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Código generado por el Diseñador de Windows Forms "

#End Region

    'variable (Flag) usada para indicar que se mueve o no de lugar la Caja de Herramienta
    Private MoverToolBar As Boolean
    'variable usada para guardar la posición inicial de la Caja de Herramienta antes de arrastrar
    Private MoverDesde As Point

    Private Sub ToolBar1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ToolBar1.MouseDown
        'libera la barra para moverse
        MoverToolBar = True
        'Guarda los valores X e Y del puntero del mouse dentro de la ToolBar
        MoverDesde = New Point(e.X, e.Y)
        'Indica que el control ha sido capturado por el mouse
        ToolBar1.Capture = True
    End Sub

    Private Sub ToolBar1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ToolBar1.MouseMove
        If MoverToolBar Then 'Verifica si la barra se está arrastrando
            'Verifica si la ToolBar esta anclada arriba
            If ToolBar1.Dock = DockStyle.Top Then
                'Verifica si el puntero se a movido 20 pixeles (el valor puede ser cualquiera + 0)
                If MoverDesde.Y < (e.Y - 20) Then
                    DesconectarBarra()
                End If
            Else
                'Verifica si la ToolBar esta anclada a la izquierda
                If ToolBar1.Dock = DockStyle.Left Then
                    'Verifica si el puntero se a movido 20 pixeles (el valor puede ser cualquiera + 0)
                    If MoverDesde.X < (e.X - 20) Then
                        DesconectarBarra()
                    End If
                Else
                    'Verifica si la ToolBar esta anclada abajo
                    If ToolBar1.Dock = DockStyle.Bottom Then
                        'Verifica si el puntero se a movido 20 pixeles (el valor puede ser cualquiera + 0)
                        If MoverDesde.Y > (e.Y + 20) Then
                            DesconectarBarra()
                        End If
                    Else
                        'Verifica si la ToolBar esta anclada a la derecha
                        If ToolBar1.Dock = DockStyle.Right Then
                            'Verifica si el puntero se a movido 20 pixeles (el valor puede ser cualquiera + 0)
                            If MoverDesde.X > (e.X + 20) Then
                                DesconectarBarra()
                            End If
                        Else
                            'Verifica si la ToolBar no está anclada en ningún lado
                            If ToolBar1.Dock = DockStyle.None Then
                                ToolBar1.Left = e.X + ToolBar1.Left - MoverDesde.X
                                ToolBar1.Top = e.Y + ToolBar1.Top - MoverDesde.Y
                                'Verifica la distancia que está del borde(el valor puede ser cualquiera + 0)
                                If ToolBar1.Top < 6 Then
                                    MoverToolBar = False
                                    'Anclar ToolBar arriba
                                    ToolBar1.Dock = DockStyle.Top
                                ElseIf ToolBar1.Left < 6 Then
                                    MoverToolBar = False
                                    'Anclar ToolBar a la izquierda
                                    ToolBar1.Dock = DockStyle.Left
                                    Else
                                        If (Me.Width - (ToolBar1.Left + ToolBar1.Width + 5)) < 6 Then
                                            MoverToolBar = False
                                            'Anclar ToolBar a la derecha
                                            ToolBar1.Dock = DockStyle.Right
                                        Else
                                            If (Me.Height - ((ToolBar1.Height * 2) + ToolBar1.Top)) < 6 Then
                                            MoverToolBar = False
                                            'Anclar ToolBar abajo
                                            ToolBar1.Dock = DockStyle.Bottom
                                        End If
                                    End If
                                End If
                             End If
                          End If
                      End If
                  End If
              End If
          End If
      End Sub

      Private Sub ToolBar1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ToolBar1.MouseUp
          'la barra no puede moverse
          MoverToolBar = False
          'Indica que el control ha sido liberado por el mouse
          ToolBar1.Capture = False
      End Sub
      
      Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick
          ' Acá se define la función que ejecutará cada botón
          ' En este ejemplo soló programo el botón salir
          If e.Button Is Me.tbbSalir Then
              Me.Close()
          End If
      End Sub

      Private Sub DesconectarBarra()
          'la barra no puede moverse
          MoverToolBar = False
          'se asigna a la ToolBar el valor para que no este anclada a ningún lado
          ToolBar1.Dock = DockStyle.None
          ' se le asigna los valores X e Y donde se situará la barra (el valor 20, puede ser cambiado por cualquier otro)
          ToolBar1.Location = New Point(20, 20)
          ' se le asigna los valores Width y Heigth de la barra (los valores pueden ser cualquiera)
          ToolBar1.Size = New Size(150, 100)
      End Sub
End Class

 


Espero que el artículo les haya sido útil, si es así por favor colabora conmigo votando por este artículo en PanoramaBox. Gracias.


 


Fichero con el código de ejemplo: creyes_ToolBarFlotante.zip - 11 KB


ir al índice