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 に答える