Olá a todos,
Gostaria de compartilhar uma dica em que, confesso, também já quebrei a cabeça para resolver. Como podemos passar variáveis, textos, números ou qualquer outro tipo de informação de um Form para outro em C#? Bem, na verdade é bem simples e, para exemplificar, fiz um pequeno projeto para ajudar no entendimento.
PS: Caso queiram fazer o processo inverso, pegando a variável do Form aberto, veja este post:
http://tutoriaiscsharp.blogspot.com.br/2013/09/pegar-variavel-do-form-aberto-em-csharp.html
Primeiro devemos alterar o método construtor do Form que receberá esta variável, ficando algo parecido com o código abaixo:
http://tutoriaiscsharp.blogspot.com.br/2013/09/pegar-variavel-do-form-aberto-em-csharp.html
Primeiro devemos alterar o método construtor do Form que receberá esta variável, ficando algo parecido com o código abaixo:
public frmSecundaria(string texto)
{
InitializeComponent();
lblTexto.Text = texto;
}
Onde o parâmetro "string texto" será a variável que o Form receberá e o "lblTexto.Text" é onde a variável será usada.
Já no Form em que chamará este outro Form, devemos apenas passar o parâmetro no momento da criação da instância do Form. Ficará assim:
private void btnAbrir_Click(object sender, EventArgs e)
{
frmSecundaria novaForm = new frmSecundaria(tbTexto.Text);
novaForm.Show();
}
Como puderam notar, é algo muito simples. Obviamente este foi um exemplo rápido, mas que pode ser aplicado a várias situações bem mais complicadas.
Se quiserem testar, o .exe compilado para o .NET Framework 4.0 do programa pode ser baixado no seguinte link: http://goo.gl/U5u8A
Já o projeto e código fonte completo do programa está em: http://goo.gl/SKSDZ
Caramba, valeu mesmo !!!!!!!!!!!!!!
ResponderExcluirajudou pacas, depois de um dia praticamente inteiro tentando !
cara ta explicado muito por cima isso ai!
ResponderExcluirque é esse tal de
"(tbTexto.Text)"
p.U
o Textbox né!!!!
ExcluirQuando escrevo "tbTexto.Text" quero dizer quer que estou pegando a propriedade "Text" do controle chamado "tbTexto", que nesse caso é o textBox da primeira janela.
ResponderExcluirHá alguns padrões para dar nomes aos objetos e, no caso dos textBoxes, usa-se as iniciais tb seguido de algum nome.
Abraço
Dahora eim, mas assim, como que eu faço do form 2 para o form 1...
ResponderExcluirFiz do mesmo jeito que esta no exemplo, eu debuguei e o form 1 está recebendo a informação porém ele não aplica, o campo não sute efeito nenhum...
Alguém sabe me informar o que pode ser ?
Obrigado desde já...
e como faço isso com mais text boxes ???
ResponderExcluirAo invés de passar através do construtor apenas uma string, passe mais variáveis, ou mesmo um Array. O resto fica exatamente como no post.
ExcluirQualquer coisa é só falar.
Abraço
tipo criar string valor1 , string valor2 e tal ?? mas porem quando eu vou adicionar ele acusa erro ... eu igualo textbox1.text = valor1; textbox2.text = valor2 ... e na hora de expor isso aki frmSecundaria novaForm = new frmSecundaria(textbox1.Text); // como faço para colocar o textbox2 aki ?
ResponderExcluirnovaForm.Show();
Faça assim:
ExcluirfrmSecundaria novaForm = new frmSecundaria(textbox1.Text, textbox2.Text, textbox3.Text); //etc... quantos quiser.
Na outra form que irá receber os valores(formSecundaria no seu caso) você altera o método construtor, deixando-o desta forma:
public frmSecundaria(string texto, string texto2, string texto3) //etc... quantos quiser também
{
InitializeComponent();
//dentro o construtor use as variáveis texto1, texto2, texto3 como quiser, igualando nos locais desejados.
}
Se ainda tiver dúvidas é só falar.
Até +
Segui os passos acima para compartilhar mais variáveis e ficou assim:
Excluirpublic FrmSecundario(string TxtcodigoUsuario, string TxtLoginLogin, string TxtNivelNivel) ///variavel de senha capturada do formulário Login
{
InitializeComponent();
LblCodigousuario.Text = TxtcodigoUsuario;
LblNivel.Text = TxtNivelNivel;
LblUsuario.Text = TxtLoginLogin;
}
Sem problemas, só que no formulário principal quando vou carregar as variaveis ele dá mensagem de que as variaveis nao existe (TxtLoginLogin.Text, TxtNivelNivel).
FrmPrincipal FormPrincipal = new FrmPrincipal(TxtCodigoUsuario.Text, TxtLoginLogin.Text, TxtNivelNivel);
FormPrincipal.ShowDialog();
O que estou fazendo de errado??
Oi colega, acho que agora entendi o problema. Você está tentando passar a variável do form que foi aberto depois do que deseja que receba as informações.
ExcluirNeste caso você pode criar uma propriedade no form de DESTINO das informações desta forma:
private static string textoGlobal;
public static string TextoGlobal
{
get { return textoGlobal; }
set { textoGlobal = value; }
}
E no form que dará ORIGEM as informações altere o valor da propriedade desta forma:
frmPrincipal.TextoGlobal = "qualquer informação";
*No form de destino você usará a variável com modificador private(iniciando letra minúscula), pois esta variável está encapsulada para esta classe.
Veja se agora consegue fazer o que deseja.
Abraço
Boa tarde,
ResponderExcluirFiz o procedimento porém o valor não é passo para o formulário secundário.
Estou usando o visual studio 2010.
Quando ao comando tbTexto.Text, no meu dá um erro fala que o nome da variavel nao existe, quando eu tiro o "tb", nao dá erro, porem o valor nao é passado para o formulario secundario.
Pode me ajudar?
Quando escrevemos "tbTexto.Text" queremos informar que estamos pegando a propriedade "Text" do controle "tbTexto", que é um textBox. No meu código existe um textBox com este nome, porém no seu pode ser do nome que quiser. Para renomeá-lo basta clicar no textBox que arrastou para seu formulário e alterá-lo na janela de propriedades, que por padrão fica no canto inferior direito.
ExcluirCara, olha só como eu fiz...
ResponderExcluir<<< FORMULÁRIO SECUNDÁRIO >>>
public FrmItensConsultoria(string EmpresaItens)
{
InitializeComponent();
TxtEmpresaItensCons.Text = (EmpresaItens);
}
Onde EmpresaItens - Se refere a uma variável do tipo string que deve estar carregada com o campo chave do formulário principal.
------------------------------------------------------------------------------------
<<< FORMULÁRIO PRINCIPAL >>>
private void BtnInclui2_Click(object sender, EventArgs e)
{
FrmItensConsultoria FormItensConsultoria = new FrmItensConsultoria(TxtEmpresa.Text);
FormItensConsultoria.ShowDialog();
}
Onde: TxtEmpresa.text é um campo do tipo textbox que carrega no formulário principal o campo chave.
O problema é que quando acesso o formulário secundário, ele não carrega o campo chave do formulário principal.
Não dá nenhum erro, apenas fica vazio.
Oi, deveria funcionar. Está tudo certo.
ExcluirVeja se o "TxtEmpresa.text" está sendo alimentado corretamente antes do formulário secundário ser aberto.
Antes do "FormItensConsultoria.ShowDialog()" adicione um MessageBox desta forma:
"MessageBox.Show(TxtEmpresa.Text);" para testar.
Bom dia Jhomps,
ResponderExcluirObrigado pela ajuda, ainda persiste um problema.
No form Origem fiz como vc falou e está certo sem erros.
No formdestino porém, a duvida é o seguinte:
Em qual local eu devo colocar o comando:
Em qual local eu devo colocar o comando: <>>
se for quando eu chamar o formulário segundário, ele não reconhece a variável <>.
alguem pode me ajudar quero digitar um valor no textbox e pareca no label.. depois esse melhor valor somar com outro valor que digito no texbox
ResponderExcluirOi Sthefanie, crie um TextBox e um Label no seu projeto. No evento KeyPress do TextBox você coloca este código:
Excluirint somaTotal = 0;
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13) //Ao apertar enter o valor digitado será somado
{
somaTotal += int.Parse(textBox1.Text);
label1.Text = somaTotal.ToString();
}
}
Espero que ajude.
Até mais.
Como faço para pegar os dados de uma dbGrid e jogar no form que abriu a dbGrid, tipo uma consulta que abre um form, depois que eu clicar em cima ele pega esses dados e joga na tela anterior.
ResponderExcluirOi Ragner, basta você pegar a linha do Grid através do evento CellContentDoubleClick e passar para o Form anterior como está explicado neste post. Se precisar de ajuda é só falar.
ExcluirAbraço
E se tiver um form com vários botões nomeados, como pegar o nome de cada um deles em outro form e em uma label, ?
ResponderExcluirOlá, neste caso faça usando propriedades, como mostro nesta postagem: http://tutoriaiscsharp.blogspot.com.br/2013/09/pegar-variavel-do-form-aberto-em-csharp.html
ExcluirAbraço
Este comentário foi removido pelo autor.
ResponderExcluirPerfeito amigo, obrigado por compartilhar essa solução.
ResponderExcluircomo passar uma variavel para um arquivo em batch? A variavel vai ser a apk que o bat vai decompilar
ResponderExcluirNossa, você continua ajudando as pessoas... parabens... depois de muito tempo tentando, fazendo coisas mirabolantes, um simples exemplo salvou meu dia... Parabens
ResponderExcluirboa noite; estou com uma duvida, somei dois valores.int x= convert.tobyte(a) + x= convert.tobyte(b); blz até ai tudo ok, porem quando eu somo 5+5 =10. pretendo pega esse valor 10 e passar a outro form, porém com valor 11. não estou tendo essa noção de logica, ou não conheço o metodo a ser usado. alguém me ajuda.
ResponderExcluirpublic void a(int b, int c)
ResponderExcluir{
b = Convert.ToByte(textsoma1.Text);
c = Convert.ToByte(textsoma2.Text);
int f = Convert.ToByte(b) + Convert.ToByte(c);
textLIST_1.Text += textLIST_1.Text = f.ToString() +"-";
return;
}