Ver Mensaje Individual
  #146 (permalink)  
Antiguo 04/06/2008, 16:10
alfredo_m
 
Fecha de Ingreso: junio-2007
Mensajes: 44
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: FAQ´S del foro de Net

TEMA: Diseño de User Controls
PREGUNTA: ¿Cómo Agrego un Control a un Control personalizado, que posteriormente pueda ser editable desde el diseñador? Como el TabControl.
RESPUESTA:

Código PHP:
Public Class Class_1
.
.
.
Public 
Sub Add()
                
Dim s As IContainer //Será Nuestro Contenedor
                
Dim MyControl As New Control //El control puede ser reemplazado por algun label etc.. 
                
MyControl.Name="MyControl" 
                
.Iniciar Los valores del control 
                

                . 
               
MyControl.CreateControl()//Obliga a su creación 
                
s=me.Container //Es importante colocar "Me" no "MyBase", puede traer problemas.
                
If Me.DesignMode Then //Preguntamos si esta en modo de diseño
                    
s.Add(MyControl)//Le dice al lenguage correspondiente que lo agrege como elemento en el codigo de contenedores
                
End If 
                
Me.Controls.Add(MyControl// Agrega el elemento a los controles del UserControl.
End Sub
.
.
.
.

End Class 
Si necesitan agregar el control en el contenedor de su control, y no el de ustedes, pueden colocar:
Código PHP:
Public Class Class_1
.
.
.
Public 
Sub Add()
                
Dim s As IContainer //Será Nuestro Contenedor
                
Dim MyControl As New Control //El control puede ser reemplazado por algun label etc.. 
                
MyControl.Name="MyControl" 
                
.Iniciar Los valores del control 
                

                . 
               
MyControl.CreateControl()//Obliga a su creación 
               
s=me.Parent.Container//Dice que se agregara a los controles del contenedor Padre
                
If Me.DesignMode Then //Preguntamos si esta en modo de diseño
                    
s.Add(MyControl)//Le dice al lenguage correspondiente que lo agrege como elemento en el codigo de contenedores
                
End If 
                
Me.Parent.Controls.Add(MyControl// Agrega el elemento a los controles del Contenedor padre
End Sub
End 
Class
.
.

Para eliminar el control:

Código PHP:
.
.
.
Public 
Sub Removed(obj as IComponet)
           
Dim s As IContainer
           
If Me.DesignMode Then
                s
=Me.Container
                s
.Removed(obj)
           
End If
           
Me.Controls.Remove(obj)
end Sub
.
.

La forma en que se colocan los componentes, asegura que los elementos se podran mover libremente, tanto dentro del User control, Como el contenedor padre de este último. La forma de que el control no se pueda mover después de ser creado, se debe verificar con algun evento. Es decir, si por ejemplo, se quiere que el control creado no se mueva de cierta posición, es conveniente crear un control y ocupar algún evento, de éste para que no se mueva.

Código PHP:
Public Class Lab
    Inherits Label
    
Private As Point

    
Public Sub New(ByVal X As IntegerByVal Y As Integer)
        
= New Point(XY)
    
End Sub
    
Private Sub Lab_Move(ByVal sender As ObjectByVal e As System.EventArgsHandles Me.Move
        Me
.Location m
    End Sub
End 
Class 
De esta forma se aseguran que cuando el contol sea creado, le den coordenadas para que posteriormente no se pueda mover.