Inquiridor
Qual a forma correta de passar valores entre Child Window?

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
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
-
-
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
-
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