none
Problemas com atributos herdados de um controle visual RRS feed

  • Pergunta

  • Boa tarde...

    Estou com um problema com UserControls e Herança no VS2010 - framework 4.0.

    O cenário é o seguinte:

    Como todas minhas telas utilizarão os mesmos botões, resolvi coloca-los em um UserControl, assim no meu FormBase eu adiciono apenas este controle e caso eu queira utilizar em projetos futuros, é só importar a dll.

    Criei atributos públicos para controlar o visible de cada botão, defini o DefaultValue como true e setei estes atributo como true no construtor do UserControl.

    Adicionei o controle ao meu FormBase e tudo funcionou perfeitamente. Então setei o modifiers dele como public para permitir edição no meu form filho.

    Porém ao herdar o FormBase, se eu seto o valor deste atributo como false, na hora de compilar, ele volta para true. Como estou mudando um valor padrão, era para jogar a linha no designer.cs, mas isso também não acontece. A única forma de funcionar é adicionar a linha mudando a propriedade na mão, depois do InitializeComponent do construtor do form filho.

    Alguém já passou por isso? existe alguma solução ou é ____ do framework mesmo?

    Segue o código, que é bem simples:

     public partial class UserControl1 : UserControl
      {
        public UserControl1()
        {
          InitializeComponent();
          Visibilidade = true;
        }
    
        [DefaultValue(true)]
        public bool Visibilidade
        {
          get { return button1.Visible; }
          set { button1.Visible = value; }
        }
      }
    
     partial class Form1
      {
        private void InitializeComponent()
        {
          this.userControl1 = new UserControl1();
          this.Controls.Add(this.userControl1);
        }
      }
    
     public partial class Form2 : Form1
      {
      }
    
    Absss
    Gustavo AT
    segunda-feira, 20 de dezembro de 2010 18:32

Respostas

  • Gustavo,

    Este problema é específico do Visible, o problema é que as vezes acontece de no momento em que o designer vai serializar as propriedades, o Visible do seu botão vai estar false porque o parent dele não está visível. Para contornar você poderia mudar a sua propriedade para salvar o visible, tipo:

      [DefaultValue(true)]
      public bool Visibilidade
      {
       get { return _visible; }
       set 
       { 
        _visible = value;
        button1.Visible = value; 
       }
      } private bool _visible = true;
    
    

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    terça-feira, 28 de dezembro de 2010 18:18
    Moderador

Todas as Respostas