Usuário com melhor resposta
Como fazer um Form chamar outro Form e passar valores de um para o outro?

Pergunta
-
Boa tarde a todos.
Bem, o cenário é o seguinte:
Minha aplicação Windows Forms (C# 2.0) possui 2 Forms: o primeiro é o MainForm que é o programa principal e possui uma GroupBox onde está inserida uma ListBox. Ao inicializar o sistema, o MainForm deve abrir um segundo Form (SecForm) que por sua vez possui uma CheckedListBox e um botão. O usuário seleciona alguns valores nas checkBoxes e quando clicar no botão, este deve passar os valores selecionados para o MainForm e inserir os valores escolhidos na ListBox que mencionei.
A minha dúvida é: Como fazer para abrir o SecForm e depois como passar os valores de um form para os componentes do outro. Pesquisei no MSDN Library e não achei nada que pudesse me ajudar a solucionar essa questão.
Grato pela atenção. Abraços a todos...
Respostas
-
Fábio,
Mude a propriedade Modifier do CheckBox do segundo form para public, isto torna este controle visível no form principal. Para acessar no primeiro form, faça o seguinte, no form principal:
formSec form = new formSec();
form.ShowDialod();
this.CheckBox1.Checked = form.CheckBox2.Checked;[]s,
-
Boa tarde Fabio,
Pelo oq entendi é assim: no evento Shown do seu MainForm coloque
private void Form1_Shown(object sender, EventArgs e)
{
SecForm sform = new SecForm();
sform.ShowDialog();
}
isso vai abrir o segundo form na hr da inicialização do seu programa,
depois no SecForm vc vai colocar o seguinte:
private static string checkbox1;
private static string checkbox2;
dai vc atribui a resposta dos check para cada uma variavel,
la no seu MainForm vc faz:
SecForm sform = new SecForm();
sform.checkbox1;
ou
sform.checkbox2;
vc consegue os valores dos respectivos checks.
qualquer coisa que entendi mal ou vc não entendeu pode postar novamente....
Boa sorte. -
Olá Fábio,
O tópico abaixo mostra um exemplo mais ou menos dentro do que você precisa. No formulário principal existe um DataGridView, e o usuário clica em um botão para abrir um segundo formulário, com todas as colunas que estão visíveis / invisíveis no DataGridView.
O usuário pode, então, habilitar / desabilitar as colunas que deseja ver, e confirmar a operação, de forma que o DataGridView do formulário principal é atualizado com as escolhas feitas nesse segundo form (caixa de diálogo).
Veja se ajuda:
CheckedListBox
http://forums.microsoft.com/msdn-br/ShowPost.aspx?PostID=4287320&SiteID=21
Abraços,
Caio Proiete
Caio Proiete
Microsoft MVP, MCT, MCPD, MCTS, MCSD
http://caioproiete.net- Editado C. Augusto Proiete [MVP]Moderator sexta-feira, 13 de abril de 2012 00:07
-
Olá Fabio,
Seguindo os conselhos dos companheiros acima, ai vai mais uma dica.
Caso vc deseje abstrair o controle do form 2, crie um método do tipo static que recebe o controle, e faça o tratamento dentro do método.
public void static recebeCheckBox ( Checkbox ch)
{
//faca aqui o tratamento que deseja.
}
[]'s
Nelson Borges
-
Obrigado a todos pelas respostas!
Rogério, fiz algo semelhante ao que vc sugeriu e consegui fazer o que queria.
Consegui carregar o SecForm na inicialização exatamente como exemplificado por vc, mas para receber os checkboxes marcados do SecForm no MainForm, fiz de outra maneira, veja:
No MainForm, fiz uma referência pública a ele no evento Load:
Code Snippetpublic partial class MainForm : Form
{
public static MainForm frmMainProgram; // Fará referência ao Form Principal....
private void MainProgram_Load(object sender, EventArgs e)
{
frmMainProgram = this; // Referência ao próprio Form Principal.
}A seguir, alterei o modificador da listBox no MainForm para public e direto no SecForm, fui inserindo os itens marcados no CheckdListBox direto no ListBox através de um loop for:
Code Snippetprivate void btnOk_Click(object sender, EventArgs e)
{
// Lê as CheckBoxes selecionadas e os adiciona na ListBox em MainForm.
for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
{
MainForm.frmMainProgram.listBox1.Items.Add(checkedListBox1.CheckedItems[i]);
}// Fecha o form.
this.Close();
}Dessa forma, sempre que precisar inserir ou retirar itens do ListBox, posso fazer e qualquer form da minha aplicação.
Obrigado a todos que postaram, suas dicas serão muito úteis no aprimoramento deste projeto.
Abraços a todos!
Todas as Respostas
-
Boa tarde Fabio,
Pelo oq entendi é assim: no evento Shown do seu MainForm coloque
private void Form1_Shown(object sender, EventArgs e)
{
SecForm sform = new SecForm();
sform.ShowDialog();
}
isso vai abrir o segundo form na hr da inicialização do seu programa,
depois no SecForm vc vai colocar o seguinte:
private static string checkbox1;
private static string checkbox2;
dai vc atribui a resposta dos check para cada uma variavel,
la no seu MainForm vc faz:
SecForm sform = new SecForm();
sform.checkbox1;
ou
sform.checkbox2;
vc consegue os valores dos respectivos checks.
qualquer coisa que entendi mal ou vc não entendeu pode postar novamente....
Boa sorte. -
Fábio,
Mude a propriedade Modifier do CheckBox do segundo form para public, isto torna este controle visível no form principal. Para acessar no primeiro form, faça o seguinte, no form principal:
formSec form = new formSec();
form.ShowDialod();
this.CheckBox1.Checked = form.CheckBox2.Checked;[]s,
-
Olá Fábio,
O tópico abaixo mostra um exemplo mais ou menos dentro do que você precisa. No formulário principal existe um DataGridView, e o usuário clica em um botão para abrir um segundo formulário, com todas as colunas que estão visíveis / invisíveis no DataGridView.
O usuário pode, então, habilitar / desabilitar as colunas que deseja ver, e confirmar a operação, de forma que o DataGridView do formulário principal é atualizado com as escolhas feitas nesse segundo form (caixa de diálogo).
Veja se ajuda:
CheckedListBox
http://forums.microsoft.com/msdn-br/ShowPost.aspx?PostID=4287320&SiteID=21
Abraços,
Caio Proiete
Caio Proiete
Microsoft MVP, MCT, MCPD, MCTS, MCSD
http://caioproiete.net- Editado C. Augusto Proiete [MVP]Moderator sexta-feira, 13 de abril de 2012 00:07
-
Olá Fabio,
Seguindo os conselhos dos companheiros acima, ai vai mais uma dica.
Caso vc deseje abstrair o controle do form 2, crie um método do tipo static que recebe o controle, e faça o tratamento dentro do método.
public void static recebeCheckBox ( Checkbox ch)
{
//faca aqui o tratamento que deseja.
}
[]'s
Nelson Borges
-
Obrigado a todos pelas respostas!
Rogério, fiz algo semelhante ao que vc sugeriu e consegui fazer o que queria.
Consegui carregar o SecForm na inicialização exatamente como exemplificado por vc, mas para receber os checkboxes marcados do SecForm no MainForm, fiz de outra maneira, veja:
No MainForm, fiz uma referência pública a ele no evento Load:
Code Snippetpublic partial class MainForm : Form
{
public static MainForm frmMainProgram; // Fará referência ao Form Principal....
private void MainProgram_Load(object sender, EventArgs e)
{
frmMainProgram = this; // Referência ao próprio Form Principal.
}A seguir, alterei o modificador da listBox no MainForm para public e direto no SecForm, fui inserindo os itens marcados no CheckdListBox direto no ListBox através de um loop for:
Code Snippetprivate void btnOk_Click(object sender, EventArgs e)
{
// Lê as CheckBoxes selecionadas e os adiciona na ListBox em MainForm.
for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
{
MainForm.frmMainProgram.listBox1.Items.Add(checkedListBox1.CheckedItems[i]);
}// Fecha o form.
this.Close();
}Dessa forma, sempre que precisar inserir ou retirar itens do ListBox, posso fazer e qualquer form da minha aplicação.
Obrigado a todos que postaram, suas dicas serão muito úteis no aprimoramento deste projeto.
Abraços a todos!
-
Boa tarde Fábio,
Acrescentando possibilidades...
Uma forma para você fazer isso é através da propriedade Owner do formulário. Para isso você precisa:
- No evento Load do Form1 você instancia o objeto Form2 e em seguida executa o método Show() do objeto instanciado informando quem será o Owner daquele formulário, neste caso será o objeto que chamou o segundo formulário
private
void Form1_Load(object sender, EventArgs e)
{ Form2 f2 = new Form2();f2.Show(
this);}
Espero ter ajudado.
Abraços,
Marco Felde- Sugerido como Resposta Marco Felde terça-feira, 10 de fevereiro de 2009 11:57