我想在两个窗体(c#)之间传递值。我该怎么做?
我有两种形式:Form1和Form2。
Form1包含一个按钮。当我单击该按钮时,Form2应该打开,而Form1应该处于非活动模式(即,不可选择)。
Form2包含一个文本框和一个提交按钮。当我在Form2的文本框中键入任何消息并单击Submit按钮时,Form2应该关闭,而Form1应该突出显示所提交的值。
我该怎么做?有人可以通过一个简单的例子帮助我做到这一点。
Answers:
有几种解决方案,但这是我倾向于使用的模式。
// 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 Form2(string qs):this(){}
该窗体将无法很好地显示。
定义一个属性
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;
}
在将数据从一种形式传递到另一种形式的一系列努力之后,我终于找到了一个稳定的答案。它就像魅力。
您要做的就是public static datatype 'variableName'
以一种形式声明一个变量,然后将该值分配给要传递给另一种形式的变量,然后直接使用表单名称以另一种形式调用此变量(不要以这种形式创建该对象)可以直接访问静态变量)并访问此变量值。
这样的例子是
表格1
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
public string getdata;
在按钮中 form1
form2 frm= new form2();
this.hide();
form2.show();
要将数据发送给form1
您,可以尝试任何事件以及该事件之后的代码
form1 frm= new form1();
form1.getdata="some string to be sent to form1";
现在,在关闭form2
和打开后form1
,您可以在getdata
字符串中使用返回的数据。
在form1中声明字符串public 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构造函数中
public Form2(ref Form1 form1handel)
{
firstformRef = form1handel;
InitializeComponent();
}
在form2板条箱变量Form1 firstformRef中;
private void Submitt_Click(object sender, EventArgs e)
{
firstformRef.TextBoxString = textBox1.Text;
this.Close();
firstformRef.Show();
}
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中输入新文本,然后按Submit按钮。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();
}
}
好吧,Form1
还有一个文本框,首先,您必须Form1
在textbox属性中将此文本框设置为public。
代码表1:
Public button1_click()
{
Form2 secondForm = new Form2(this);
secondForm.Show();
}
Form1
如this
在构造函数中那样传递。
代码Form2:
Private Form1 _firstForm;
Public Form2(Form1 firstForm)
{
_firstForm = firstForm:
}
Public button_click()
{
_firstForm.textBox.text=label1.text;
This.Close();
}
您可以将Form1的文本框作为参数传递,如下所示:
在Form 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();
}
构造函数是在表单或Gui对象之间传递数据的最佳方法。在form1单击按钮中,您应该具有:
Form1.Enable = false;
Form2 f = new Form2();
f.ShowDialog();
在表单2中,当用户单击按钮时,它应具有类似或类似的代码:
this.Close();
Form1 form = new Form1(textBox1.Text)
form.Show();
进入表单1的表单加载后,您可以添加代码以从构造函数中获取值以执行任何操作。
如何将值从窗体传递到另一个窗体
1.)转到Form2,然后双击它。在代码中键入此。
public Form2(string v)
{
InitializeComponent();
textBox1.Text = v;
}
2.)转到Form1,然后双击它。在代码中键入此。//在Form1中的命令按钮处
private void button1_Click(object sender, EventArgs e)
{
Form2 F2 = new Form2(textBox1.Text);
F2.Show();
}
这很简单。假设您有2个窗口,分别是Form1和Form2,并且要将textbox1的记录从Form1发送到Form2,并在Form2的label1中显示该记录;然后在Form2中创建一个名称为label1的标签,并转到label1的属性并设置'Modifiers'= public,然后在Form 1中创建一个ID为textBox1的textBox和一个名称为commit的按钮,然后在按钮click事件上编写以下代码
button1_Click(object sender, EventArgs e)
{
Form2 obj=new Form2();
obj.label1.text=textBox1.text.ToString();
obj.show();
}
就是这样...您可以通过这种方式将数据集记录绑定到另一个表单的datagridview ......
如果愿意,可以使用其他方法。
使用System.Action
您可以将其视为传递给子窗体的回调函数。
// -------- 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<string> UpdateSettings = null;
// IN THE CHILD FORMS CONSTRUCTOR
public Options(Action<string> UpdateSettings)
{
InitializeComponent();
this.UpdateSettings = UpdateSettings;
}
private void btnUpdate_Click(object sender, EventArgs e)
{
// CALLING THE CALLBACK FUNCTION
if (UpdateSettings != null)
UpdateSettings("some data");
}
OpenForms方法
这种方法很简单(2行)。但是仅适用于开放形式。您需要做的就是将这两行添加到要传递数据的任何位置。
Main frmMain = (Main)Application.OpenForms["Main"];
frmMain.UpdateSettings("Some data");
我在这里提供了类似问题的答案
您可以使用它;
Form1 button1单击
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
this.Hide();
frm2.Show();
}
并将其添加到Form2
public string info = "";
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;
}
如果将窗体中的控件的“修饰符属性”更改为“公共”,则其他窗体可以访问该控件。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
}
如何使用公共活动
我会这样做。
public class Form2
{
public event Action<string> SomethingCompleted;
private void Submit_Click(object sender, EventArgs e)
{
SomethingCompleted?.Invoke(txtData.Text);
this.Close();
}
}
然后从Form1调用它。
private void btnOpenForm2_Click(object sender, EventArgs e)
{
using (var frm = new Form2())
{
frm.SomethingCompleted += text => {
this.txtData.Text = text;
};
frm.ShowDialog();
}
}
然后,当Form2关闭时,Form1可以从Form2获取文本
谢谢。
// In form 1
public static string Username = Me;
// In form 2's load block
string _UserName = Form1.Username;