将值从一个窗体发送到另一个窗体

我想要传递两个窗体(c#)之间的值。 我该怎么做?

我有两种forms:Form1和Form2。

Form1包含一个button。 当我点击那个button时,Form2应该打开并且Form1应该处于不活动模式(即不可select)。

Form2包含一个文本框和一个提交button。 当我在Form2的文本框中键入任何消息并单击提交button时,Form2应该closures,Form1应该与提交的值突出显示。

我该怎么做? 有人可以帮我做一个简单的例子。

有几个解决scheme,但这是我倾向于使用的模式。

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

和…

 // 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; } 

定义一个属性

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

form2

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

获取form1form3的数据

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

经过一连串的从一种forms到另一种forms的数据传递之后,我终于find了一个稳定的答案。 它的作品像魅力。

所有你需要做的就是在一个表单中声明一个variables作为public static datatype 'variableName' ,并将值赋予你想传递给另一个表单的variables,并用另一个表单直接使用表单名称来调用这个variables( 不创build此表单的对象,因为可以直接访问静态variables )并访问此variables值。

例如,

Form1中

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

窗体2

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

form1声明一个公共string

 public string getdata; 

form1button中

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

要将数据发送到form1您可以尝试以下任何事件和代码

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

现在closuresform2并打开form1 ,就可以在getdatastring中使用返回的数据了。

在form1中声明stringpublic string TextBoxString;

在form1中单击事件添加

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

在form2 constructer

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

在form2的箱子里variablesForm1 firstformRef;

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

我曾经在各种winform项目上工作,随着应用程序变得越来越复杂(他们之间有更多的对话和交互),我开始使用一些事件系统来帮助我,因为手动打开和closures窗口的pipe理将很难保持和发展。

我用我的应用程序的CAB ,它有一个事件系统,但它可能是一个矫枉过正的情况下:)你可以编写自己的事件更简单的应用程序

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 } 

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(); } 

有用!

在此代码中,您将文本传递给Form2。 Form2显示textBox1中的文本。 用户在textBox1中键入新的文本并按下提交button。 Form1抓取该文本并将其显示在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; } } } 

这是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(); } } 

如何将值从forms传递给另一种forms

1.)转到Form2,然后双击它。 在代码中inputthis。

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

2.)转到Form1然后双击它。 在代码中inputthis。 //在Form1中的命令button

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

您可以传递参数Form1的文本框,如下所示:

在窗体1 buttom处理程序上:

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

在表格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(); } 

这很简单。 假设你有两个窗口Form1和Form2,并且你希望将Form1的文本框1的logging发送到Form2,并将这个logging显示在Form2的label1中; 然后在Form2中创build一个名称为label1的标签,并转到label1的属性,并设置“Modifiers”= public,并在表单中创build一个带有id textBox1和名称提交button的文本框,然后在button单击事件

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

多数民众赞成它…这样你可以将数据集logging绑定到另一个表单的datagridview ……

构造函数是在窗体或GUI对象之间传递数据的最佳方法,您可以这样做。 在form1点击button你应该有:

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

在表单2中,当用户点击button时,应该有这样或那样的代码:

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

一旦进入窗体1的表单加载,你可以添加代码来做任何事情,因为你从构造函数获取值。

简单的获得价值:

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

要设置值:

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

但检查string是“公共string”