我的项目中有两个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();
}
你可以帮我解决这个问题吗?
由于
答案 0 :(得分:0)
在您的第一张表格上定义:
Settings obj = (Settings)Application.OpenForms["Settings"];
private void button3_Click(object sender, EventArgs e)
{
Settings obj = new Settings();
obj.Show();
}
并使用frm
obj
问题是您必须每次都引用另一个表单的当前实例而不是打开一个新表单
答案 1 :(得分:0)
您需要在form2上创建一个包含您要存储的数据的公共属性访问器。在form2关闭后,只要你没有使用form2.MySpecialData,你仍然可以访问这些数据。在stackoverflow上已经多次询问过这个问题,并且有很多很好的例子。
Communicate between two windows forms in C#
public Form2()
{
InitializeComponent();
}
private string mySpecialData;
public string MySpecialData
{
get { return mySpecialData; }
set { mySpecialData = value; }
}
答案 2 :(得分:0)
向“设置”添加属性以返回“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;
}
}
}