C# 从表单2控制表单1上的富文本框控件

C# 从表单2控制表单1上的富文本框控件,c#,winforms,C#,Winforms,我很抱歉,如果这看起来非常明显或者是一个非常常见的问题,但我已经搜索和查看了一段时间的帖子,我似乎仍然无法得到它 我刚刚开始学习C#,我给自己做了一个小项目,围绕richtextbox控件制作了一个文字处理器,还有一些额外的功能 我目前正在添加“查找和替换”文本的功能,下面的代码在与富文本框控件相同的表单上使用时可以正常工作 richTextBox1.Rtf = richTextBox1.Rtf.Replace("bob", "bill"); 我不想使用对话框或类似的东西,但是我直接来自我们的

我很抱歉,如果这看起来非常明显或者是一个非常常见的问题,但我已经搜索和查看了一段时间的帖子,我似乎仍然无法得到它

我刚刚开始学习C#,我给自己做了一个小项目,围绕richtextbox控件制作了一个文字处理器,还有一些额外的功能

我目前正在添加“查找和替换”文本的功能,下面的代码在与富文本框控件相同的表单上使用时可以正常工作

richTextBox1.Rtf = richTextBox1.Rtf.Replace("bob", "bill");
我不想使用对话框或类似的东西,但是我直接来自我们的老朋友VB6,所以我不确定它们是否仍然存在,所以我制作了一个外部表单,它的行为有点像对话框,我希望用户能够输入要查找和替换的文本,然后按OK,然后被送回主窗体,听起来很简单,嗯,可能是,我不确定我错过了什么

private void findReplaceToolStripMenuItem_Click(object sender, EventArgs e)
{
    Form3 AboutBox = new Form3();
    AboutBox.ShowDialog();
}
我已经尽了最大努力来实现我在这里读到的一些答案,其中一个我设法控制了form1,但前提是我用
form1.show()打开了它的一个新实例在代码之后,这在我试图实现的目标中是无用的


我已经将richTextBox1.Modifiers设置为Public,但是我仍然对这个问题感到困惑。

我没有将richTextBox1.Modifiers设置为Public,而是将一个属性添加到从该控件返回文本的另一个窗体中,如下所示:

public class SearchForm : Form
{
    public string SearchTerm
    {
        get { return richTextBox1.Text; }
    }

    ...
当用户关闭“搜索”窗体时,您可以通过引用属性获取搜索词:

private void findReplaceToolStripMenuItem_Click(object sender, EventArgs e)
{
    string searchTerm;

    using (var searchForm = new SearchForm())  // used 'using' to dispose the form
    {
        searchForm.ShowDialog();

        searchTerm = searchForm.SearchTerm;
    }

    // do something with searchTerm
}

您会发现这也使维护更易于管理。更改一个表单中控件的名称不应要求您在使用它们的任何其他表单中进行更改。

这个问题有点过于宽泛,因为正确的答案还取决于您希望搜索表单如何与启动搜索对话框的父表单交互。如果您只是想提示用户替换字符串,那么像Grant这样简单的答案就足够了。但是,如果您想打开一个搜索对话框,并让它在用户从一个搜索词导航到另一个搜索词时保持打开状态,那么您还有很多工作要做。如果你真的是编程新手,那么足够的工作可能涵盖5-10个具体问题。