Separador

Hola, estoy creando una aplicación en visual basic, tengo un formulario MDI y necesito crear un separador, osea, de un lado tengo un control TreeView y del otro lado va el/los formulario/s, necesito que el usuario tenga la posibilidad de arrastrar el separador para poder ver le treeview si es que el mensaje supera al ancho, espero que me entiendan lo que estoy pideiendo, desde ya muchas gracias...
1

1 Respuesta

33.325 pts.
Tengo un código que hace el efecto que deseas entre 2 controles. Este código lo encontré no recuerdo en que página honestamente y si bien no es exactamente como tal vez lo necesites(ya que el código es sobre un mismo formulario), te deja cerca de ello, lo puedes adaptar.
Otro punto es que existen controles de terceros que hacen eso y mucho más, por ejemplo el Sheridan(que ahora se llama infragistic www.infragistics.com). Uno de sus controles te permite configurar "paneles" con las divisiones que desees y el efecto de ajustar los conotroles cuando el usuario mueve la barra de división se encarga de hacerlo el control, no hay que escribir código para ello.
Espero que te sirva.
Para probar este código necesitas:
Un TreeView llamado tvTreeView
Un control ListView llamado lvListView
Un StatusBar llamado sbStatusBar
Un PictureBox llamado picSplitter
Un Image llamdo imgSplitter
La idea es :
1. Ajustar el tamaño de los controles TreeView y ListView del mismo alto (propiedad height) para que tenga una apariencia como el Explorer de Windows
2. Colocar el TreeView en la esquina superior izquierda
3. Colocar el ListView a la derecha del TreeView (de la forma que lo mencionas solo dejando un pequeño espacio entre los 2 controles)
4. Hacer el tamaño del imagSplitter con el mismo largo que el TreeView pero con un ancho como el que hay entre los controles TreeView y ListView (por ejemplo un alto(Height) de 4800 y un ancho(Width) de 72), un Top igual al del TreeView y colócalo entre estos dos controles.
5. Hacer al PicSplitter del mismo tamaño que el imgSplitter y establecer la propiedad BackColor en gris obscuro (aquí no importa su posición porque solo aparecerá para hacer el efecto de mover la división)
6. Establecer la propiedad MouseIcon del control imgSplitter al Icono que se encuentra en \Archivos de programa\Microsoft Visual Studio\Common\Graphics\Cursors\ve_split.cur (Esto para que al posicionar el mouse [en tiempo de ejecución] sobre la división de los controles aparezca el símbolo del separador, si no tienes dicho cursor puede colocar cualquiera o ninguno en esta propiedad y funciona)
7. Establecer la propiedad MousePointer del control imgSplitter a 99 (Custom)
Los controles TreeView y ListView no se llenan en éste código, solo muestro el código para hacer la división.
Ahora coloca este código en cada uno de sus procedimientos. (Obviamente es más fácil copiar y pegar)
Espero que te sirva. Hasta luego.
En las declaraciones generales del formulario:
Dim mbMoving As Boolean
Const sglSplitLimit = 500
Sub SizeControls(X As Single)
On Error Resume Next
'establecer el ancho
If X < 750 Then X = 750
If X > (Me.Width - 750) Then X = Me.Width - 750
tvTreeView.Width = X
imgSplitter.Left = X
lvListView.Left = X + 40
lvListView.Width = Me.Width - (tvTreeView.Width + 150)
'establecer la coordenada superior
If tbToolBar.Visible Then
tvTreeView.Top = tbToolBar.Height + picTitles.Height
Else
tvTreeView.Top = picTitles.Height
End If
lvListView.Top = tvTreeView.Top
'establecer el alto
If sbStatusBar.Visible Then
tvTreeView.Height = Me.ScaleHeight - (picTitles.Top + picTitles.Height + sbStatusBar.Height)
Else
tvTreeView.Height = Me.ScaleHeight - (picTitles.Top + picTitles.Height)
End If
lvListView.Height = tvTreeView.Height
imgSplitter.Top = tvTreeView.Top
imgSplitter.Height = tvTreeView.Height
End Sub
Private Sub Form_Load()
picSplitter.Visible = False
End Sub
Private Sub Form_Resize()
On Error Resume Next
If Me.Width < 3000 Then Me.Width = 3000
SizeControls imgSplitter.Left
End Sub
Private Sub imgSplitter_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
With imgSplitter
picSplitter.Move .Left, .Top, .Width / 2, .Height - 20
End With
picSplitter.Visible = True
mbMoving = True
End Sub
Private Sub imgSplitter_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim sglPos As Single
If mbMoving Then
sglPos = X + imgSplitter.Left
sbStatusBar.Panels(1).Text = "X=" & X & " img=" & imgSplitter.Left
If sglPos < sglSplitLimit Then
picSplitter.Left = sglSplitLimit
ElseIf sglPos > Me.Width - sglSplitLimit Then
picSplitter.Left = Me.Width - sglSplitLimit
Else
picSplitter.Left = sglPos
End If
End If
End Sub
Private Sub imgSplitter_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
SizeControls picSplitter.Left
picSplitter.Visible = False
mbMoving = False
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas