gpt4 book ai didi

c# - 从父窗体打开文件到子窗体的文本框 C#

转载 作者:行者123 更新时间:2023-11-30 22:05:20 25 4
gpt4 key购买 nike

我是 c# 的新手,我在做一个项目时遇到了一些困难。我有一个有两种形式的 mdi 程序。我需要从父窗体 (Form1) 的 MenuStrip 打开一个文件到子窗体 (Form2) 的 richTextBox 中。如何使用父窗体的方法从子窗体获取 richTextBox?我不知道我做错了什么。任何帮助将非常感激。以下是我父窗体上的代码。谢谢!

   private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
ofd.Filter = "Text Files|*.txt";
openFileDialog1.Title = "";
if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
Form2 f2 = new Form2();
f2.MdiParent = this;
f2.Show();
StreamReader sr = new StreamReader(openFileDialog1.FileName);
Text = sr.ReadToEnd();
sr.Close();


}
}

最佳答案

有很多方法可以做到这一点。

一种方法是将文件名添加到子窗体的构造函数中。因此,您的主窗体将包含

Form2 f2 = new Form2(openFileDialog1.FileName);
f2.MdiParent = this;
f2.Show();

然后在子窗体的构造函数中定义:

public void Form2(string fileName);
{
StreamReader sr = new StreamReader(fileName);
this.RichTextBox1.Text = sr.ReadToEnd();
sr.Close();
}

如果子表单在没有关联文件名的情况下无法合法显示,则以上是一个明智的选择,因为您强制调用者在构造它时提供文件名。

如果子表单具有无文件模式(例如,在创建新文档时),您可以使用不同的方法。为文件名提供公共(public)属性。

家长:

Form2 f2 = new Form2()
f2.OpenFile(openFileDialog1.FileName);
f2.MdiParent = this;
f2.Show();

child :

public void OpenFile(string fileName);
{
StreamReader sr = new StreamReader(fileName);
this.RichTextBox1.Text = sr.ReadToEnd();
sr.Close();
}

最后,如果您更愿意在 MDI 类中拥有文件 I/O 逻辑,您可以只公开文本框:

家长:

Form2 f2 = new Form2()
StreamReader sr = new StreamReader(openFileDialog1.FileName);
f2.DocumentText = sr.ReadToEnd();
sr.Close();
f2.MdiParent = this;
f2.Show();

child :

public string DocumentText
{
set
{
this.RichTextBox1.Text = value;
}
}

传递文件名而不是文本的一个优点是您可以设置窗口的标题栏以显示文件名。

child :

public void Form2(string fileName);
{
StreamReader sr = new StreamReader(fileName);
this.RichTextBox1.Text = sr.ReadToEnd();
this.Text = String.Format("NotePad -- {0}", fileName); //Title
sr.Close();
}

public void OpenFile(string fileName);
{
StreamReader sr = new StreamReader(fileName);
this.RichTextBox1.Text = sr.ReadToEnd();
sr.Close();
this.Text = String.Format("NotePad -- {0}", fileName); //Title
}

关于c# - 从父窗体打开文件到子窗体的文本框 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456755/

25 4 0
文章推荐: c# - 将 list 和 list 组合成单个平面列表