将值从一个窗体发送到另一个窗体
我想要传递两个窗体(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; }
获取form1
和form3
的数据
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;
在form1
button中
form2 frm= new form2(); this.hide(); form2.show();
要将数据发送到form1
您可以尝试以下任何事件和代码
form1 frm= new form1(); form1.getdata="some string to be sent to form1";
现在closuresform2
并打开form1
,就可以在getdata
string中使用返回的数据了。
在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”