我在查找对话框中使用以下代码(它本身就是一个单独的表单)。 它为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;
}
}
答案 0 :(得分:2)
Form1是具有所有编辑器功能的主要表单
正确...您需要在屏幕上向用户显示Form1的实际实例的引用。在创建它时将其引用传递到“查找”对话框,或者如果“查找”对话框也是MdiChild,请使用MdiParent()属性获取主MDI表单,然后遍历其MdiChildren()属性直到找到所需的Form1实例。
编辑:
O.k。,当您创建并显示“查找”表单时,可以在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`...";
}
}
}