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 m As Point
Public Sub New(ByVal X As Integer, ByVal Y As Integer)
m = New Point(X, Y)
End Sub
Private Sub Lab_Move(ByVal sender As Object, ByVal e As System.EventArgs) Handles 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.