我正在尝试在C#中实现记事本应用程序克隆。现在我在实现方面遇到了一个小问题。在用于实现查找下一个选项的记事本应用程序中,我创建了一个新表单,该表单将引用主表单。当在查找表单上单击“查找下一个”按钮时,我将使用主窗体中的richtextbox内容,当前光标位置,搜索方向,搜索字符串和matchcase来计算richtextbox的selectionstart,然后更新选择。现在,selectionstart的计算工作正常。我可以从搜索字符串中获取选择的长度并设置选择。我试图通过使用传递给查找表单的引用在主窗体上设置选择。当我这样做时,除非我BringToFront mainForm或关闭查找表单窗口,否则richtextbox不会突出显示。所以我的问题是如何从另一种形式(子形式)中选择richtextbox的内容,就像在Windows记事本中实现一样?
代码段:
FormFind.cs
private void btnFindNext_Click(object sender, EventArgs e)
{
qry.SearchString = txtFind.Text;
qry.Direction = oUp.Checked ? "UP" : "DOWN";
qry.MatchCase = chkMatchCase.Checked ? true : false;
qry.Content = mainForm.GetContent();
qry.Position = mainForm.GetCurrentCursorPosition();
FindNextResult result=editOperation.FindNext(qry);
if (result.SearchStatus)
mainForm.SetSelection(result.SelectionStart,
txtFind.Text.Length);
}
MainForm.cs
private void findEditMenu_Click(object sender, EventArgs e)
{
if (formFind == null)
formFind = new FormFind(this);
formFind.Show();
}
public string GetContent()
{
return txtArea.Text.ToString();
}
internal void SetSelection(int selectionStart, int length)
{
txtArea.SelectionStart=selectionStart;
txtArea.SelectionLength = length;
this.BringToFront();
}
internal int GetCurrentCursorPosition()
{
return txtArea.SelectionStart;
}