c#Richtextbox将插入符移动到x,y位置

时间:2011-07-23 12:58:29

标签: c# winforms richtextbox move caret

  

可能重复:
  RichTextBox C# Set caret location winforms

我正在开发一个项目,我正在从终端(tn3270)接口读取,该接口的插入符号位置为X,Y,我想将其传递给显示完整终端接口的richtextbox。我尝试过google多种方式,但我似乎只能找到如何在richtextbox中获取插入符号的x,y位置。

我希望有一个可以

的功能
private void SetCaretLocation(iX,iY);

:编辑:

    private void SetCaretPos(int iX,int iY)
    {
        int iLen = 0;
        int iRow = 0;
        foreach (string str in richTextBox1.lines)
        {
            iRow++;
            iLen += str.Length;
            if (iRow == iX)
                break;
        }
        iLen += iY;

        richTextBox1.SelectionStart = iLen;
    }

我似乎正在接近一些。但这个位置似乎没有正确匹配。

2 个答案:

答案 0 :(得分:1)

我不确定这是不是应该如何完成,而是它的单向:

private void SetCaretPosition(int rows, int col)
{
    int curPos = 0;
    if (richTextBox1.Lines.Length >= rows)
    {    
        for (int i = 0; i < rows - 1; ++i)
        {
           curPos += richTextBox1.Lines[i].Length + 1; //add 1 for the newline character
        }
        richTextBox1.SelectionStart = curPos + col; 
    }
    else
        richTextBox1.SelectionStart = richTextBox1.TextLength;
    richTextBox1.ScrollToCaret();             
}

编辑:

我没有意识到你也发布了一个编辑。您需要考虑新的行字符。 1如果是\ n,2如果是\ r \ n

答案 1 :(得分:0)

检查SelectionStart方法 您可以使用RichTextBox控件的SelectionStart属性来“获取或设置文本框中所选文本的起始点。”

http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.aspx

代码示例如下:

http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.selectionstart.aspx