如何在C#中更改另一种形式的richtextbox选择?

时间:2018-02-18 05:31:02

标签: c# parent-child richtextbox notepad

我正在尝试在C#中实现记事本应用程序克隆。现在我在实现方面遇到了一个小问题。在用于实现查找下一个选项的记事本应用程序中,我创建了一个新表单,该表单将引用主表单。当在查找表单上单击“查找下一个”按钮时,我将使用主窗体中的richtextbox内容,当前光标位置,搜索方向,搜索字符串和matchcase来计算richtextbox的selectionstart,然后更新选择。现在,selectionstart的计算工作正常。我可以从搜索字符串中获取选择的长度并设置选择。我试图通过使用传递给查找表单的引用在主窗体上设置选择。当我这样做时,除非我BringToFront mainForm或关闭查找表单窗口,否则richtextbox不会突出显示。所以我的问题是如何从另一种形式(子形式)中选择richtextbox的内容,就像在Windows记事本中实现一样?

Windows Notepad

代码段:

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;
    }

0 个答案:

没有答案