在 C# 中将值从 Form2 传输到 Form1
本文关键字:Form2 传输 Form1 | 更新日期: 2023-09-27 18:34:41
我的项目中有 2 个 winforms。当我在 Form1 上单击"设置"按钮时,它会显示"设置"表单,我正在对文本框进行一些更改,当我单击第二个表单上的"保存"按钮时,它会将这些值保存到文本文件中,我想将这些值传递给第一个表单,但我无法传递它们。
这是我代码的某些部分;
此代码是"设置"按钮单击(在 Form1 上(
private void button3_Click(object sender, EventArgs e)
{
Settings frm = new Settings();
frm.Show();
}
public void funData(TextBox txtForm1)
{
label3.Text = txtForm1.Text;
}
此代码是 保存 按钮单击(第二种形式(
private void button5_Click(object sender, EventArgs e)
{
if (File.Exists(ConfigFile))
{
File.Delete(ConfigFile);
using (StreamWriter writer = new StreamWriter(ConfigFile))
{
writer.WriteLine(txtTemsPath.Text);
writer.WriteLine(txtVodafonePath.Text);
writer.WriteLine(txtTurkcellPath.Text);
writer.WriteLine(txtAveaPath.Text);
writer.Close();
}
}
else
{
using (StreamWriter writer = new StreamWriter(ConfigFile))
{
writer.WriteLine(txtTemsPath.Text);
writer.WriteLine(txtVodafonePath.Text);
writer.WriteLine(txtTurkcellPath.Text);
writer.WriteLine(txtAveaPath.Text);
writer.Close();
}
}
Form1 frm = new Form1();
delPassData del = new delPassData(frm.funData);
del(this.txtTemsPath);
frm.getSettings();
frm.TemsPath = TemsPath;
frm.Activate();
frm.Refresh();
this.Close();
}
你能帮我解决这个问题吗?
谢谢
在你的
第一个表单上定义:
Settings obj = (Settings)Application.OpenForms["Settings"];
private void button3_Click(object sender, EventArgs e)
{
Settings obj = new Settings();
obj.Show();
}
并在其他任何位置frm
用 obj
替换您的代码
问题是您必须每次都引用另一个表单的当前实例,而不是打开一个新表单
您需要在 form2 上创建一个公共属性访问器,其中包含要存储的数据。form2 关闭后,您仍然可以使用 form2 访问此数据。MySpecialData,只要你没有把它弄空。这个问题在StackOverflow上被问了很多次,有很多很好的例子。
在 C# 中的两个窗口窗体之间进行通信
public Form2()
{
InitializeComponent();
}
private string mySpecialData;
public string MySpecialData
{
get { return mySpecialData; }
set { mySpecialData = value; }
}
将属性添加到"设置"以返回"TemsPath"值。 然后,将 DialogResult 设置为 OK,而不是 Close((:
public partial class Settings : Form
{
public string TemsPath
{
get { return txtTemsPath.Text; }
}
private void button5_Click(object sender, EventArgs e)
{
// ... your save code ...
this.DialogResult = System.Windows.Forms.DialogResult.OK;
}
}
现在,回到 Form1,使用 ShowDialog(( 而不是 Show((,并在属性返回时访问该属性:
public partial class Form1 : Form
{
private void button3_Click(object sender, EventArgs e)
{
Settings frm = new Settings();
if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
label3.Text = frm.TemsPath;
}
}
}