0

我将以下代码用于查找对话框(它本身是一个单独的表单)。它为 While 循环提供 Null 引用。任何人都可以帮助此代码有什么问题,或者它是在 mdi 编辑器中查找文本的正确方法吗?谢谢

// Form1 is the main form having all editors functionalities

    private void findbtn_Click(object sender, EventArgs e)
            {
                Form1 f1 = new Form1();


                int index = 0;

                while (index < f1.GetRichtextbox().Text.LastIndexOf(textBox1.Text))
                {
                    f1.GetRichtextbox().Find(textBox1.Text,index,f1.GetRichtextbox().TextLength,RichTextBoxFinds.None);
                    f1.GetRichtextbox().SelectionBackColor = Color.Yellow;
                    index = f1.GetRichtextbox().Text.IndexOf(f1.GetRichtextbox().Text, index) + 1;
                }


            }
4

1 回答 1

2

Form1 是具有所有编辑器功能的主要表单

对...您需要对用户在屏幕上可见的 Form1 实际实例的引用。在创建时将引用传递给“查找”对话框,或者如果您的“查找”对话框也是 MdiChild,则使用 MdiParent() 属性获取主 MDI 表单,然后迭代其 MdiChildren() 属性直到找到所需的 Form1 实例。

编辑:

好的,您可以在创建和显示“查找”表单时在 Show() 命令中传递对 MdiParent 的引用:

public partial class frmMdiParent : Form
{

    public frmMdiParent()
    {
        InitializeComponent();
    }

    private void findToolStripMenuItem_Click(object sender, EventArgs e)
    {
        frmFind find = new frmFind();
        find.Show(this);
    }

}

现在,在“查找”表单中,您可以将 Owner() 属性转换回 MdiParent。使用其 ActiveMdiChild() 属性获取对 Form1 的引用:

public partial class frmFind : Form
{

    private frmMdiParent frmMDI = null;

    public frmFind()
    {
        InitializeComponent();
        this.Shown += new EventHandler(frmFind_Shown);             
    }

    void frmFind_Shown(object sender, EventArgs e)
    {
        if (this.Owner != null && this.Owner is frmMdiParent)
        {
            this.frmMDI = (frmMdiParent)this.Owner;
        }
    }

    private void btnFind_Click(object sender, EventArgs e)
    {
        if (this.frmMDI != null && this.frmMDI.ActiveMdiChild is Form1)
        {
            Form1 frm1 = (Form1)this.frmMDI.ActiveMdiChild;
            // ... do something with "frm1" ...
            frm1.Text = "Hello from `frmFind`...";
        }
    }

}
于 2013-10-24T20:47:27.570 回答