Как отправить строковое значение из родительской формы в дочерний (и наоборот) - PullRequest
0 голосов
/ 25 ноября 2018

В этом сегменте кода я сохраняю содержимое textbox в .txt файл с использованием SaveFileDialog.То, что я хотел бы сделать (как описано в комментарии в коде), это получить полный каталог, в котором сохраняется файл .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
        }

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вы пробовали это?

    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 , так что после нажатия кнопки ОК диалог this.Text будетесть новое значение на нем.

0 голосов
/ 25 ноября 2018

Правильно, в настоящее время оно у меня есть как свойство в Form2 (строковый каталог)

Хорошо, так что если у вас есть "// set directory of activeChild", вы захотите приведение к типу Form2 , чтобы вы могли получить доступ к этому свойству:

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