none
Problemas com manipulação de UserControls no mesmo Form RRS feed

  • Pergunta

  • Galera,

    Estou com problema ao manipular user controls em um form da minha aplicação, que no caso, é uma aplicação para configurar a connection string, recebendo valores diretos do usuario (quase igual o wizard de conexão do VS).

    Quando seleciono no combo box "Microsoft SQL Server" ele carrega um user control... quando seleciono ".... Database File" ele carrega otro user control.

    Minhas duvidas são as seguintes:

    - Existe alguma forma de "trocar" de user control ou apenas fechando uma e abrindo outra?

    - Como faço para que um item dentro do user control acesse um evento do form? (exemplo: close() do form).

    Agradeço desde ja pela atenção.

    Att.
    Thiago Piccoli

    terça-feira, 21 de julho de 2009 14:20

Respostas

  • Olá Thiago,

    Sim, é possível... Existem várias formas de fazer isso, mas a mais simples (minha opinião), é utilizar, por exemplo, um controle painel (Panel) para servir de container para os seus UserControls para que você possa adicionar/remover controles mais facilmente (supondo que terá apenas UM UserControl de cada vez).

    Por exemplo, adicione um painel no formulário, e quando quiser adicionar (ou trocar) o UserControl que está dentro desse painel, basta limpar a coleção de controles do painel, e depois instanciar e adicionar o controle instanciado nesse painel. Algo como:

    // Remove todos os controles que estão no painel
    seuPainel.Controls.Clear();
    
    // E adiciona o novo UserControl que você deseja
    SeuUserControl novoControle = new SeuUserControl();
    seuPainel.Controls.Add(novoControle);
    ---

    Com relação à sua segunda pergunta, para obter uma referência para o formulário onde está o seu UserControl, basta utilizar a propriedade ParentForm do seu UserControl.

    // Fecha o formulário que contém o UserControl
    this.ParentForm.Close();
    

    Importante: Em termos de arquitetura, não é uma boa prática acessar o formulário de dentro do UserControl... O correto seria disparar um evento no seu UserControl que pode ser tratado pelo formulário, se ele estiver "interessado" nesse evento. Assim você dá mais flexibilidade para o seu UserControl, para que ele possa ter diferentes comportamentos, dependendo do formulário em que ele é utilizado.

    Abraços,
    Caio Proiete



    Caio Proiete Siga-me no Twitter!
    http://www.caioproiete.com
    quarta-feira, 5 de agosto de 2009 21:11
    Moderador