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...
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