【问题标题】:How to send string value from parent form to child (and vice versa)如何将字符串值从父表单发送到子表单(反之亦然)
【发布时间】:2018-11-24 23:00:06
【问题描述】:

这段代码是我通过使用SaveFileDialogtextbox 的内容保存到.txt 文件的地方。我想做的(如代码中的注释中所述)是获取保存.txt 文件的完整目录,并将其保存为childMDI表单中的字符串值。

这只是为了跟踪每个 childMDI 与哪个目录关联,因为它们的内容可以保存在任何地方(鉴于使用 SaveFileDialog)。

更具体地阐述:

我有两种形式。表格 1 和表格 2。 Form1 有一个保存功能,它获取 Form2 中文本框的内容并将其保存到文件中。但是,我可以创建 Form2 类型的多个实例。我希望能够通过保存保存 txt 文件时选择的目录和路径并将其与 Form2 的特定实例相关联来跟踪这些文件在程序中的保存位置(我的想法是有一个字符串“目录”在可以存储此值的 Form2 中)。我知道如何将目录作为字符串获取,只是不知道如何将其从 Form1 传递到 Form2。

Form activeChild = this.ActiveMdiChild;
        TextBox txtBox = (TextBox)activeChild.ActiveControl;

        if (activeChild.Text == "untitled")
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Filter = "txt files (*.txt)|*.txt";
            saveFileDialog1.Title = "Save your Text File";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                using (StreamWriter writeFile = new StreamWriter(saveFileDialog1.FileName))
                {
                    writeFile.Write(txtBox.Text);
                    writeFile.Close();
                }
            }
            this.Text = Path.GetFileName(saveFileDialog1.FileName);
            activeChild.Text = Path.GetFileNameWithoutExtension(saveFileDialog1.FileName);

            // set directory of activeChild
        }

【问题讨论】:

  • 不清楚你的问题是什么。考虑解释为什么你目前正在做的事情不起作用。
  • 我有两个表格。表格 1 和表格 2。 Form1 有一个保存功能,它获取 Form2 中文本框的内容并将其保存到文件中。但是,我可以创建 Form2 类型的多个实例。我希望能够通过保存保存txt文件时选择的目录和路径并将其与Form2的特定实例相关联来跟踪这些文件在程序中的保存位置(我的想法是有一个string“目录”在 Form2 中可以存储此值的位置)。我知道如何将目录作为字符串获取,我只是不知道如何将其从 Form1 传递到 Form2。
  • form2 的公共属性或构造函数参数,取决于没有它(属性)或没有它(构造函数)的 form2 是否有用
  • 对,我目前将它作为 Form2 (字符串目录)中的一个属性,但我只是在努力从 Form1 发送它的值(我假设我会努力将它从 Form2 传递回Form1,如果我需要访问它)。老实说,我觉得我以前也这样做过,但我在网上找不到任何信息来记忆。

标签: c# visual-studio winforms mdi


【解决方案1】:

对了,我目前把它作为Form2中的一个属性(字符串目录)

好的,所以在您有“//set directory of activeChild”的地方,您需要强制转换为 Form2 类型,以便您可以访问该属性:

if (this.ActiveMdiChild is Form2)
{
    Form2 f2 = (Form2)this.ActiveMdiChild;
    f2.Directory = System.IO.Path.GetDirectoryName(saveFileDialog1.FileName);
}

【讨论】:

  • 完美。非常感谢。
【解决方案2】:

你试过了吗?

    if (activeChild.Text == "untitled")
            {
                SaveFileDialog saveFileDialog1 = new SaveFileDialog();
                saveFileDialog1.Filter = "txt files (*.txt)|*.txt";
                saveFileDialog1.Title = "Save your Text File";
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    using (StreamWriter writeFile = new StreamWriter(saveFileDialog1.FileName))
                    {
                        writeFile.Write(txtBox.Text);
                        writeFile.Close();
                    }
                    this.Text = Path.GetFileName(saveFileDialog1.FileName);
                    activeChild.Text = Path.GetFileNameWithoutExtension(saveFileDialog1.FileName);
                }


                // set directory of activeChild
            }

this.Text = Path.GetFileName(saveFileDialog1.FileName);activeChild.Text = Path.GetFileNameWithoutExtension(saveFileDialog1.FileName); 放在saveFileDialog1 if 语句 中,这样在您单击ok 对话框后,this.Text 上就会有一个新值。

【讨论】:

    猜你喜欢
    • 2017-09-14
    • 1970-01-01
    • 2018-02-10
    • 2022-11-10
    • 2012-03-06
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多