在 Winforms 中,空字符串从一种形式传递到另一种形式

Empty string gets passed from one Form to another in Winforms

我有以下问题: 我有一个 Form1,我从中打开第二个 Form2。现在我在 Form2 中有一个保存 Button,其中来自文本框的条目被保存到一个 csv 文件中。但我也想保存 Form1 中的一些条目。来自 Form2Textbox 条目正在保存,但来自 Form1 的条目是空字符串。以下代码:

在表格 1 中:

public void showInputToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2(this);
        form2.Show();
    }

通过第一个表单打开第二个表单,并从 Form1 文本框中获取条目:

    public String getLocation()
    {
        return LocationBox.Text;
    }

    public String getFilesLoc()
    {
        return FilesLocation.Text;
    }

在 Form2 中我有以下内容:

    private Form1 m_form = null;

    public Form2(Form1 f)
    {
        InitializeComponent();
        m_form = f;
    }

然后是获取条目并保存它们的函数:

     private void button1_Click(object sender, EventArgs e)
    {
        Form1 form1 = new Form1();
        proc.setParams(form1.getLocation(),getFilesLoc());
        proc.saveCurrentSettings();
    }

我省略了其他参数。因此 Form2 中的条目被正确读取,但 Form1 中的条目只是一个空字符串 ("")。我能做什么?

在点击处理程序中,您要在此处创建 new Form1:

Form1 form1 = new Form1();

这将有空值 - 但您想要来自 现有 表单的值,您在构造函数中保留了对它的引用 - 所以使用它!

private void button1_Click(object sender, EventArgs e)
{
    proc.setParams(m_form.getLocation(), m_form.getFilesLoc());
    proc.saveCurrentSettings();
}

(我强烈建议您开始遵循 .NET 命名约定,很可能将那些 get 方法转换为属性,并考虑将 传递给您的 Form2 构造函数而不是 Form1 引用本身。这取决于您是否需要 "see" 在构造 Form2 之后对 Form1 所做的任何更改。)

使用

 proc.setParams(m_form.getLocation(), m_form.getFilesLoc());
 proc.saveCurrentSettings();

您没有使用 Form1 的引用,而是创建了一个新对象并使用了它。