none
Utilizando Component em Component RRS feed

  • Pergunta

  • Bom dia!

    Criei alguns Component herdando dos components existentes no framework: TextBox, GridView, etc.

    Como tenho algumas propriedades e metodos que sao comuns, estava buscando uma forma de centralizar o esse codigo e reaproveita-lo, entao criei component comum herdando do System.ComponentModel.Component e adicionei no componente herdado do textbox. Aparentemente funcionou, porem quando adiciono o meu_textbox no for e altero uma propriedade do component nao joga esse codigo para o designer do form, e nao reconhece o valor da propriedade em runtime. Portando se eu adicionar o codigo manualmente no designer ai funciona.

    Queria saber se tem alguma coisa que pode ser feito para que alterando a propriedade ja joga o valor no designer, ou se nao é aconselhavel fazer o que estou tentando. Vou postar o codigo:

    Componente comum

    Partial Class Obj_Comp_Arquivo
        Inherits System.ComponentModel.Component
    
        <System.Diagnostics.DebuggerNonUserCode()> _
        Public Sub New(ByVal container As System.ComponentModel.IContainer)
            MyClass.New()
    
            'Required for Windows.Forms Class Composition Designer support
            If (container IsNot Nothing) Then
                container.Add(Me)
            End If
    
        End Sub
    
        <System.Diagnostics.DebuggerNonUserCode()> _
        Public Sub New()
            MyBase.New()
    
            'This call is required by the Component Designer.
            InitializeComponent()
    
        End Sub
    
        'Component overrides dispose to clean up the component list.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
    
        'Required by the Component Designer
        Private components As System.ComponentModel.IContainer
    
        'NOTE: The following procedure is required by the Component Designer
        'It can be modified using the Component Designer.
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            components = New System.ComponentModel.Container()
        End Sub
    
    End Class
    
    Public Class Obj_Comp_Arquivo
    
    #Region " P_ArquivoPasta "
        Private vBol_ArquivoPadrao As Boolean
        Private vStr_ArquivoNome As String
    
        <System.ComponentModel.Category("P_ArquivoPasta"), _
        System.ComponentModel.Description("Informar se o devemos gravar o arquivo no Servidor de Arquivos Padrao.")> _
        Public Property P_ArquivoPadrao() As Boolean
            Get
                Return Me.vBol_ArquivoPadrao
            End Get
            Set(ByVal value As Boolean)
                Me.vBol_ArquivoPadrao = value
            End Set
        End Property
    
        <System.ComponentModel.Category("P_ArquivoPasta"), _
        System.ComponentModel.Description("Informar o Nome do Arquivo. Exemplo: Arq01.")> _
        Public Property P_ArquivoNome() As String
            Get
                Return Me.vStr_ArquivoNome
            End Get
            Set(ByVal value As String)
                Me.vStr_ArquivoNome = value
            End Set
        End Property
    #End Region
    
    End Class
    
    Componente Textbox

    Partial Class Meu_TextBox
        Inherits System.Windows.Forms.TextBox
    
        <System.Diagnostics.DebuggerNonUserCode()> _
        Public Sub New(ByVal container As System.ComponentModel.IContainer)
            MyClass.New()
    
            'Required for Windows.Forms Class Composition Designer support
            If (container IsNot Nothing) Then
                container.Add(Me)
            End If
    
        End Sub
    
        <System.Diagnostics.DebuggerNonUserCode()> _
        Public Sub New()
            MyBase.New()
    
            'This call is required by the Component Designer.
            InitializeComponent()
    
        End Sub
    
        'Component overrides dispose to clean up the component list.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
    
        'Required by the Component Designer
        Private components As System.ComponentModel.IContainer
    
        'NOTE: The following procedure is required by the Component Designer
        'It can be modified using the Component Designer.
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            Me.components = New System.ComponentModel.Container
            Me.Obj_Comp_Arquivo = New Plataforma.BibHerancas.Obj_Comp_Arquivo(Me.components)
            Me.SuspendLayout()
            '
            'Obj_Comp_Arquivo
            '
            Me.Obj_Comp_Arquivo.P_ArquivoPadrao = False
            Me.Obj_Comp_Arquivo.P_AquivoNome = Nothing
            '
            'Sabtech_TextBox
            '
            Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
            Me.ReadOnly = True
            Me.ResumeLayout(False)
    
        End Sub
        Public WithEvents Obj_Comp_Arquivo As Plataforma.BibHerancas.Obj_Comp_Arquivo
    End Class
    

    terça-feira, 17 de setembro de 2013 14:01

Todas as Respostas

  • Todo componente tem a propriedade Controls que mantém a lista do  filhos.

    Então no componente pai você deve usar Me.Controls.Add(controleFilho)

    quarta-feira, 18 de setembro de 2013 11:25