none
Como ocultar uma propriedade de um controle? RRS feed

  • Pergunta

  • Olá

    Gente, estou criando um controle usando Inherits RichTextBox, e preciso ocultar algumas propriedades. 

    Encontrei o código a baixo no entanto parece não funcionar:

      Protected Sub PreFilterProperties(ByVal properties As IDictionary)
                properties.Remove("BackColor")
            End Sub

    Preciso chamá-lo de alguma forma?

    terça-feira, 2 de maio de 2017 19:40

Respostas

  • Na verdade isso é algo que nao é permitido pela Orientaçao à Objeto. 

    Voce nao pode remover propriedades da classe pai. Isso vai contra esse principio: https://pt.wikipedia.org/wiki/Princ%C3%ADpio_da_substitui%C3%A7%C3%A3o_de_Liskov

    Voce nao pode "enfraquecer" uma classe quando voce a herda. Voce pode somente extende-la.

    O que voce deve fazer é sobrescreve-la(polimorfirmo), exemplo:

    [Obsolete("Esta propriedade nao deve ser utilizada.", true)]
    public override System.Drawing.Color BackColor 
    { 
        get 
        { 
            return base.BackColor; 
        }
        set
        {
            base.BackColor = value;
        }
    }

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".





    terça-feira, 2 de maio de 2017 19:49
    Moderador

Todas as Respostas

  • Na verdade isso é algo que nao é permitido pela Orientaçao à Objeto. 

    Voce nao pode remover propriedades da classe pai. Isso vai contra esse principio: https://pt.wikipedia.org/wiki/Princ%C3%ADpio_da_substitui%C3%A7%C3%A3o_de_Liskov

    Voce nao pode "enfraquecer" uma classe quando voce a herda. Voce pode somente extende-la.

    O que voce deve fazer é sobrescreve-la(polimorfirmo), exemplo:

    [Obsolete("Esta propriedade nao deve ser utilizada.", true)]
    public override System.Drawing.Color BackColor 
    { 
        get 
        { 
            return base.BackColor; 
        }
        set
        {
            base.BackColor = value;
        }
    }

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".





    terça-feira, 2 de maio de 2017 19:49
    Moderador
  • Olá William

    Obrigado por me ajudar. Na verdade oque eu preciso é alterar a cor padrão do backcolor e impedir que seja alterada para outra.

    terça-feira, 2 de maio de 2017 20:29
  • Eliseu, 

    Ainda sim a dica do William está correta. Você pode sobrescrever a propriedade em sua classe filha e ignorar as mudanças de cor, faça um teste.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quarta-feira, 3 de maio de 2017 11:57
  • Olá Juliano

    Obrigado pelo apoio. Tentei usar o código sugerido convertido para .net:

     <Obsolete("Esta propriedade nao deve ser utilizada.", True)>
            Public Overrides Property BackColor As System.Color
                Get
                    Return MyBase.Name
                End Get
                Set
                    MyBase.Name = Value
                End Set
            End Property

    mas o código fica incorreto:

    quarta-feira, 3 de maio de 2017 12:24
  • Confira qual o tipo de retorno e o nome correto da propriedade na classe base, não podem haver diferenças.

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quarta-feira, 3 de maio de 2017 12:38
  • Olá William

    Obrigado por me ajudar. Na verdade oque eu preciso é alterar a cor padrão do backcolor e impedir que seja alterada para outra.

    Neste caso faça assim:

    public override System.Drawing.Color BackColor 
    { 
        get 
        { 
            return base.BackColor; 
        }
        set
        {
            base.BackColor  = <cor padrao>;// coloque aqui a cor padrao...
        }
    }

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    quarta-feira, 3 de maio de 2017 13:08
    Moderador
  • Olá Juliano

    Obrigado pelo apoio. Tentei usar o código sugerido convertido para .net:

     <Obsolete("Esta propriedade nao deve ser utilizada.", True)>
            Public Overrides Property BackColor As System.Color
                Get
                    Return MyBase.Name
                End Get
                Set
                    MyBase.Name = Value
                End Set
            End Property

    mas o código fica incorreto:

    O correto é System.Drawing.Color ao inves de System.Color

    Muitas vezes escrevemos o codigo aqui sem usar o visual studio. Considere o codigo qu colocamos aqui como uma sugestao. Na maioria das vezes voce vai ter que adaptar e corrigir o codigo proposto. 

    Att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quarta-feira, 3 de maio de 2017 13:11
    Moderador
  • Olá William

    Entendi, muito obrigado.

    quinta-feira, 4 de maio de 2017 16:53