【问题标题】:Empty string gets passed from one Form to another in Winforms空字符串在 Winforms 中从一个表单传递到另一个表单
【发布时间】:2015-01-08 10:50:02
【问题描述】:

我有以下问题: 我有一个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 的条目只是一个空字符串(“”)。我能做什么?

【问题讨论】:

  • 您正在创建一个新的表单1,就在您调用这些值之前并且您没有显示它,因此在 gui 中没有任何内容被初始化
  • 那怎么会是正确的呢?当我在值之后创建它时,它不会找到它们。
  • @ZoomVirus,这是答案而不是评论。
  • 您希望在FilesLocation.Text 中紧跟在Form1 form1 = new Form1() 之后有什么?为空字符串是正常的。有form1.ShowDialog() 电话吗?

标签: c# winforms forms textbox


【解决方案1】:

在点击处理程序中,您正在此处创建一个 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 所做的任何更改。)

【讨论】:

    【解决方案2】:

    使用

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

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

    【讨论】:

    • 谢谢!现在工作正常!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    相关资源
    最近更新 更多