Usuário com melhor resposta
Como ocultar uma propriedade de um controle?

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?
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".
- Editado William John Adam TrindadeModerator quarta-feira, 3 de maio de 2017 13:12
- Marcado como Resposta Eliseu5 quinta-feira, 4 de maio de 2017 16:54
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".
- Editado William John Adam TrindadeModerator quarta-feira, 3 de maio de 2017 13:12
- Marcado como Resposta Eliseu5 quinta-feira, 4 de maio de 2017 16:54
-
-
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.
-
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:
-
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.
-
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".- Editado William John Adam TrindadeModerator quarta-feira, 3 de maio de 2017 13:09
- Sugerido como Resposta Juliano Nunes Silva Oliveira quarta-feira, 3 de maio de 2017 13:16
-
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". -