none
Qual a forma correta de passar valores entre Child Window? RRS feed

  • Pergunta

  • Bom dia

    Estou com uma necessidade por enquanto fiz da forma que vou expor abaixo, porém, gostaria da opinião de vocês se está forma está correta:

    No meu projeto, em um determinado momento abro uma child window (PRINCIPAL) preencho alguns campos e através de um botão abro outra child window (COMPLEMENTAR) preencho outras informações e preciso que algumas destas informações preenchidas estejam disponíveis na child window de baixo (PRINCIPAL). Fiz assim:

    Na child window PRINCIPAL criei um objeto do tipo da child window (COMPLEMENTAR):

    ncInformacoesC2 informacoesCchild = new ncInformacoesC2();

    no click de um botão da child (PRINCIPAL) abro a child window COMPLEMENTAR instanciada:

    informacoesCchild.Show();

    Na child window (COMPLEMENTAR) criei um evento publico:

    public event EventHandler SubmitClicked = null;

    Na child (COMPLEMENTAR) também criei uma propriedade do valor que quero ter acesso na child (PRINCIPAL) e seto este valor no click do botão OK e chamo o evento que criei acima:

    No construtor da child (PRINCIPAL) defino o evento criado na child (COMPLEMENTAR):

    informacoesCchild.SubmitClicked += new EventHandler(informacoesCchild _SubmitClicked);

    e para finalizar crio um método para atualizar os valores que trouxe da child (COMPLEMENTAR):

    void informacoesCchild_SubmitClicked(object sender, EventArgs e)
    {
    complemento1.Text = informacoesCchild.complemento1.Text;                   
    }

    Isso funcionou, mas não estou convencido que seja a forma mais simples e funcional de se fazer.

    Aguardo sugestão dos colegas.

    []



    Eduardo Agostinho Analista Programador - C# Developer


    • Editado EAgostinho segunda-feira, 29 de outubro de 2012 12:22 Erro de digitação
    segunda-feira, 29 de outubro de 2012 12:20

Todas as Respostas

  • Boa noite Eduardo,

    realmente funciona, mas não considero a maneira mais simples de fazer.

    Para passar valores entre janelas costumo criar um novo construtor na Child Window que recebe como parâmetro uma referencia do Parent, através da qual passo valores às propriedades ou controles do Parent. Outra alternativa é utilizar a propriedade this.Parent, mas lembre-se de converter o retorno (object) para o tipo do Parent.

    Abraços


    Daniel Cheida de Oliveira

    domingo, 18 de novembro de 2012 22:04
  • Olá Daniel bom dia...

    Primeiramente, obrigado por sua resposta!

    Será que você teria algum link ou exemplo de como implementar o Parent?

    Desde já agradeço!


    Eduardo Agostinho Analista Programador - C# Developer

    segunda-feira, 19 de novembro de 2012 02:32
  • Boa tarde Eduardo,

    segue exemplo:

    No formulário pai temos uma propriedade, que será acessada pelo filho para passar um valor, e quando instanciamos o filho atribuímos a ele uma instância do pai utilizando a propriedade Parent:

        public partial class ParentForm : Form
        {
            public ParentForm()
            {
                InitializeComponent();
            }
    
            public string Property1 { get; set; }
    
            private void button1_Click(object sender, EventArgs e)
            {
                var child = new ChildForm() { Parent = this };
                child.Show();
            }
        }
    No filho acessamos o pai através da propriedade Parent:


        public partial class ChildForm : Form
        {
            public ChildForm()
            {
                InitializeComponent();
            }
    
            public void Method1()
            {
                var parent = this.Parent as ParentForm;
                parent.Property1 = "abc";
            }
        }


    Abraços,


    Daniel Cheida de Oliveira


    • Editado Daniel Cheida segunda-feira, 19 de novembro de 2012 15:02
    • Sugerido como Resposta Daniel Cheida segunda-feira, 19 de novembro de 2012 15:03
    segunda-feira, 19 de novembro de 2012 15:02
  • Daniel Boa noite

    Entendi claramente o funcionamento, mas percebi que está herdando de FORM, e no meu caso a herança é de CHILDWINDOW.

    Na child pai não reconhece:

    { Parent = this }

    E na child Filha não reconhece ParentForm do trecho:

    this.Parent as ParentForm

    Mais uma vez muito obrigado pela ajuda!


    Eduardo Agostinho Analista Programador - C# Developer

    terça-feira, 20 de novembro de 2012 01:50