空字符串在 WinForms 中从一个窗体传递到另一个窗体

本文关键字:窗体 一个 另一个 字符串 WinForms | 更新日期: 2023-09-27 18:36:39

我有以下问题:我有一个Form1,我从中打开第二个Form2。现在我在Form2中有一个保存Button,其中文本框中的条目被保存到csv文件中。但是我也想保存一些Form1条目。Form2中的Textbox条目正在保存,但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中的条目只是一个空字符串 (")。我能做什么?

空字符串在 WinForms 中从一个窗体传递到另一个窗体

在单击处理程序中,您将在此处创建新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引用本身。这取决于您是否需要"查看"在构建Form2后对Form1所做的任何更改。

使用

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

您不是在使用 Form1 的引用,而是创建一个新对象并使用它。