【问题标题】:Controlling a rich text box control that is on form 1 from form 2从表单 2 控制表单 1 上的富文本框控件
【发布时间】:2014-10-09 18:23:12
【问题描述】:

如果这看起来非常明显或非常常见的问题,我很抱歉,但我一直在搜索和查看帖子有一段时间了,但我似乎仍然无法理解。

我刚刚开始学习 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,但我还在为这个而摸不着头脑。

【问题讨论】:

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

标签: c# winforms


【解决方案1】:

我没有将 RichTextBox 公开,而是将一个属性添加到从该控件返回文本的另一个表单,如下所示:

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
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2018-06-02
    • 2019-03-27
    • 1970-01-01
    相关资源
    最近更新 更多