Enviar valores de um formulário para outro formulário

Eu quero passar valores entre dois formulários (c #). Como eu posso fazer isso?

Eu tenho duas formas: Form1 e Form2.

Form1 contém um botão. Quando clico nesse botão, o Form2 deve abrir e o Form1 deve estar no modo inativo (ou seja, não selecionável).

Form2 contém uma checkbox de texto e um botão de envio. Quando eu digito qualquer mensagem na checkbox de texto do Form2 e clique no botão enviar, o Form2 deve fechar e Form1 deve realçar com o valor enviado.

Como eu posso fazer isso? Alguém pode me ajudar a fazer isso com um exemplo simples?

Existem várias soluções para isso, mas este é o padrão que eu uso.

// Form 1 // inside the button click event using(Form2 form2 = new Form2()) { if(form2.ShowDialog() == DialogResult.OK) { someControlOnForm1.Text = form2.TheValue; } } 

E…

 // Inside Form2 // Create a public property to serve the value public string TheValue { get { return someTextBoxOnForm2.Text; } } 
 private void button1_Click(object sender, EventArgs e) { Form2 frm2 = new Form2(textBox1.Text); frm2.Show(); } 

  public Form2(string qs) { InitializeComponent(); textBox1.Text = qs; } 

Definir uma propriedade

 public static class ControlID { public static string TextData { get; set; } } 

No form2

 private void button1_Click(object sender, EventArgs e) { ControlID.TextData = txtTextData.Text; } 

Obtendo os dados no form1 e form3

 private void button1_Click(object sender, EventArgs e) { string text= ControlID.TextData; } 

Depois de uma série de lutas por passar os dados de uma forma para outra, finalmente encontrei uma resposta estável. Isso funciona como charme.

Tudo que você precisa fazer é declarar uma variável como public static datatype 'variableName' em um formulário e atribuir o valor a essa variável que você deseja passar para outro formulário e chamar essa variável em outro formulário usando diretamente o nome do formulário criar object deste formulário como variables ​​estáticas podem ser acessadas diretamente ) e acessar este valor variável.

Exemplo de tal é,

Formulário 1

 public static int quantity; quantity=TextBox1.text; \\Value which you want to pass 

Form2

 TextBox2.Text=Form1.quantity;\\ Data will be placed in TextBox2 

Declarar uma cadeia pública no form1

 public string getdata; 

No botão do form1

 form2 frm= new form2(); this.hide(); form2.show(); 

Para enviar dados para o form1 você pode tentar qualquer evento e código seguindo nesse evento

 form1 frm= new form1(); form1.getdata="some string to be sent to form1"; 

Agora, após fechar o form2 e abrir o form1 , você pode usar os dados retornados na string getdata .

declare string no form1 public string TextBoxString;

no form1 click event add

 private void button1_Click(object sender, EventArgs e) { Form1 newform = new Form1(); newform = this; this.Hide(); MySecform = new Form2(ref newform); MySecform.Show(); } 

no construtor form2

 public Form2(ref Form1 form1handel) { firstformRef = form1handel; InitializeComponent(); } 

in form2 crate variable Form1 firstformRef;

 private void Submitt_Click(object sender, EventArgs e) { firstformRef.TextBoxString = textBox1.Text; this.Close(); firstformRef.Show(); } 

Eu trabalhei em vários projetos winform e como os aplicativos ficam mais complexos (mais diálogos e interações entre eles), então eu comecei a usar algum sistema de events para me ajudar, porque o gerenciamento de abrir e fechar janelas manualmente será difícil manter e desenvolver mais.

Eu usei CAB para meus aplicativos, ele tem um sistema de events, mas pode ser um exagero no seu caso 🙂 Você poderia escrever seus próprios events para aplicativos mais simples

Código Form1:

 private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.ShowDialog(); MessageBox.Show("Form1 Message :"+Form2.t.Text); //can put label also in form 1 to show the value got from form2 } 

Código Form2:

  public Form2() { InitializeComponent(); t = textBox1; //Initialize with static textbox } public static TextBox t=new TextBox(); //make static to get the same value as inserted private void button1_Click(object sender, EventArgs e) { this.Close(); } 

Funciona!

Nesse código, você passa um texto para o Form2. Formulário2 mostra esse texto em textBox1. O usuário digita o novo texto em textBox1 e pressiona o botão enviar. Form1 agarra esse texto e mostra em uma checkbox de texto no Form1.

 public class Form2 : Form { private string oldText; public Form2(string newText):this() { oldText = newText; btnSubmit.DialogResult = DialogResult.OK; } private void Form2_Load(object sender, EventArgs e) { textBox1.Text = oldText; } public string getText() { return textBox1.Text; } private void textBox1_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { DialogResult = System.Windows.Forms.DialogResult.OK; } } } 

E este é o código Form1:

 public class Form1:Form { using (Form2 dialogForm = new Form2("old text to show in Form2")) { DialogResult dr = dialogForm.ShowDialog(this); if (dr == DialogResult.OK) { tbSubmittedText = dialogForm.getText(); } dialogForm.Close(); } } 

Como passar os valores do formulário para outro formulário

1.) Goto Form2, em seguida, clique duas vezes nele. No código, digite isso.

 public Form2(string v) { InitializeComponent(); textBox1.Text = v; } 

2.) Goto Form1, em seguida, clique duas vezes nele. No código, digite isso. // no seu botão de comando no Form1

 private void button1_Click(object sender, EventArgs e) { Form2 F2 = new Form2(textBox1.Text); F2.Show(); } 

você pode passar como parâmetro a checkbox de texto do Form1, assim:

No manipulador de buttom de formulário 1:

 private void button2_Click(object sender, EventArgs e) { Form2 newWindow = new Form2(textBoxForReturnValue); newWindow.Show(); } 

No formulário 2

 public static TextBox textBox2; // class atribute public Form2(TextBox textBoxForReturnValue) { textBox2= textBoxForReturnValue; } private void btnClose_Click(object sender, EventArgs e) { textBox2.Text = dataGridView1.CurrentCell.Value.ToString().Trim(); this.Close(); } 

Isso é muito simples. Suponha que você tenha 2 janela formulário Form1 e Form2 e você deseja enviar registro de textbox1 de Form1 para Form2 e exibir este registro no label1 do Form2; então no Form2 crie um label cujo nome é label1 e vá para a propriedade label1 e configure ‘Modifiers’ = public e no Form one crie um textBox com id textBox1 e um botão de name submit então escreva o seguinte código no botão click event

 button1_Click(object sender, EventArgs e) { Form2 obj=new Form2(); obj.label1.text=textBox1.text.ToString(); obj.show(); } 

é isso … para este modo você pode ligar o registro de dataset ao datagridview de outro formulário ……

Os construtores são as melhores maneiras de passar dados entre formulários ou Objetos Gui que você pode fazer isso. No formulário1 clique no botão que você deve ter:

 Form1.Enable = false; Form2 f = new Form2(); f.ShowDialog(); 

No formulário 2, quando o usuário clica no botão, ele deve ter um código como este ou similar:

 this.Close(); Form1 form = new Form1(textBox1.Text) form.Show(); 

Uma vez dentro do formulário load do formulário 1, você pode adicionar código para fazer qualquer coisa enquanto obtém os valores do construtor.

Você pode usar uma abordagem diferente, se quiser.

  1. Usando System.Action (Aqui você simplesmente passa a function de formulários principal como o parâmetro para o formulário filho como uma function de retorno de chamada)
  2. Método OpenForms (você chama diretamente um dos seus formulários abertos)

Usando System.Action

Você pode pensar nisso como uma function de retorno de chamada passada para o formulário filho.

 // -------- IN THE MAIN FORM -------- // CALLING THE CHILD FORM IN YOUR CODE LOOKS LIKE THIS Options frmOptions = new Options(UpdateSettings); frmOptions.Show(); // YOUR FUNCTION IN THE MAIN FORM TO BE EXECUTED public void UpdateSettings(string data) { // DO YOUR STUFF HERE } // -------- IN THE CHILD FORM -------- Action UpdateSettings = null; // IN THE CHILD FORMS CONSTRUCTOR public Options(Action UpdateSettings) { InitializeComponent(); this.UpdateSettings = UpdateSettings; } private void btnUpdate_Click(object sender, EventArgs e) { // CALLING THE CALLBACK FUNCTION if (UpdateSettings != null) UpdateSettings("some data"); } 

Método OpenForms

Este método é fácil ( 2 linhas ). Mas só funciona com formulários que estão abertos. Tudo o que você precisa fazer é adicionar essas duas linhas onde quer que você queira passar alguns dados.

 Main frmMain = (Main)Application.OpenForms["Main"]; frmMain.UpdateSettings("Some data"); 

Eu forneci minha resposta para uma pergunta semelhante aqui

Ok, então Form1 tem uma checkbox de texto, antes de tudo você tem que definir esta checkbox de texto Form1 para pública na propriedade de checkbox de texto.

Código Form1:

 Public button1_click() { Form2 secondForm = new Form2(this); secondForm.Show(); } 

Passe o Form1 como this no construtor.

Código Form2:

 Private Form1 _firstForm; Public Form2(Form1 firstForm) { _firstForm = firstForm: } Public button_click() { _firstForm.textBox.text=label1.text; This.Close(); } 

Você pode usar isso;

Botão Form1 button1

 private void button1_Click(object sender, EventArgs e) { Form2 frm2 = new Form2(); this.Hide(); frm2.Show(); } 

E adicione isso ao Form2

 public string info = ""; 

Botão Form2 button1

 private void button1_Click(object sender, EventArgs e) { info = textBox1.Text; this.Hide(); BeginInvoke(new MethodInvoker(() => { Gogo(); })); } public void Gogo() { Form1 frm = new Form1(); frm.Show(); frm.Text = info; } 

Simples obtenha o valor com:

 var form1 = new Form1(); string sample = form1.examplestring; 

Para definir o valor:

 var form1 = new Form1(); form1.examplestring = example; 

mas verifique se a string é “public string”

 public string example = "test"; 

se você alterar propriedade de modificadores de um controle em um formulário para público, outros formulários podem acessar a esse controle. fe:

  Form2 frm; private void Form1_Load(object sender, EventArgs e) { frm = new Form2(); frm.Show(); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show(frm.txtUserName.Text); //txtUserName is a TextBox with Modifiers=Public }