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

你能帮我解决这个问题吗?

谢谢

在 C# 中将值从 Form2 传输到 Form1

在你的

第一个表单上定义:

 Settings obj = (Settings)Application.OpenForms["Settings"];
private void button3_Click(object sender, EventArgs e)
    {
        Settings obj = new Settings();
        obj.Show();  
    }

并在其他任何位置frmobj 替换您的代码

问题是您必须每次都引用另一个表单的当前实例,而不是打开一个新表单

您需要在 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;
        }
    }
}