在我的Windows窗体应用程序中,我添加了两个表单:Form1
和Form2
。
Form1
中有一个按钮,Form2
中有一个richtextbox。
我期望的是,一旦我点击Form1
中的按钮,就会显示Form2
,同时显示一个文件对话框。
现在我想将文件从文件加载到富文本框,问题是如何从代码中访问richtextbox?
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "txt files (*.txt)|*.txt";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
this.Hide();
Form Form2 = new Form();
Form2.Show();
// load a text file to rich text box. How to access the rich text box here?
}
catch (Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
}
}
}
更新
我尝试创建一个Form2实例并将一个字符串传递给它的构造函数,但它无法正常工作。
public partial class Form2 : Form
{
public Form2(string text)
{
InitializeComponent();
richTextBox1.Text = text;
}
}
答案 0 :(得分:2)
只需通过Form2构造函数传递文本(您应该修改其构造函数或添加新构造函数):
string text = File.ReadAllText(openFileDialog1.FileName);
Form2 form2 = new Form2(text);
form2.Show();
以下是构造函数的外观:
public Form2(string text)
{
InitializeComponent();
richtextbox.Text = text;
}
错误解决方案:只需在设计器中选择richtextbox,然后将其Modifiers
属性更改为public
即可。您将破坏表单的封装,但可以在Form2类之外访问控件。
答案 1 :(得分:0)
或者您可以将Form2中的richtextbox声明为public,甚至可以声明一个公共属性来加载数据,并直接从Form1访问。
[更新]
我可能错误地解释了它。我的意思是将richtextbox公开,而不仅仅是表单。
然后只需访问控件即可加载任何内容:
Form2 objForm2 = new Form2();
//Open file, etc...
objForm2.richTextBoxForm2.Text = "XXXX";
objForm2.Show();
objForm2.BringToFront();
答案 2 :(得分:0)
在Form1中
namespace WindowsFormsApplication7
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
Form2 form2 = new Form2();
form2.Show();
}
}
}
在Form2中
namespace WindowsFormsApplication7
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "txt files (*.txt)|*.txt";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string text = File.ReadAllText(openFileDialog1.FileName);
richTextBox1.Text = text;
}
}
}
}