以第二种形式访问richtextbox

时间:2014-07-07 15:20:18

标签: c# winforms

在我的Windows窗体应用程序中,我添加了两个表单:Form1Form2Form1中有一个按钮,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实例并将一个字符串传递给它的构造函数,但它无法正常工作。 image

 public partial class Form2 : Form
{
    public Form2(string text)
    {
        InitializeComponent();
        richTextBox1.Text = text;
    }
}

3 个答案:

答案 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公开,而不仅仅是表单。

enter image description here

然后只需访问控件即可加载任何内容:

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;
        }
    }
  }
}