【问题标题】:c# how to place cursor at postion in richtextboxc#如何将光标放在richtextbox中的位置
【发布时间】:2018-07-07 09:25:17
【问题描述】:

我在 WinForms 中有一个丰富的文本框,并创建了一个复制和粘贴功能,我可以在光标处复制和粘贴。但是,一旦粘贴了我的光标就会移动到富文本框的开头。如何让它保持在该位置或移动到粘贴部分的末尾?

我试过了

Point p = new Point(Cursor.Position.X, Cursor.Position.Y);
rtbNotePad.PointToClient(p); //but does not work.

private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
    rtbNotePad.Copy();
}

private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
{
    string pasteText = Clipboard.GetText(TextDataFormat.Text).ToString();
    Point p = new Point(Cursor.Position.X, Cursor.Position.Y);

    if (Clipboard.ContainsText())
    {
        rtbNotePad.Text = rtbNotePad.Text.Insert(rtbNotePad.SelectionStart, Clipboard.GetText(TextDataFormat.Text).ToString());
        rtbNotePad.PointToClient(p);
    }
}

【问题讨论】:

  • 不要重新分配 Text 属性,这会强制 RTB 将光标向后移动,因为文本已完全改变。而是使用 rtbNotePad.SelectedText = ClipBoard.GetText();

标签: c# copy richtextbox paste


【解决方案1】:

您应该使用SelectionStart 属性来控制ReachtextBox 中的光标位置。

    private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
    {
        string pasteText = Clipboard.GetText(TextDataFormat.Text).ToString();

        if (Clipboard.ContainsText())
        {
            var start = rtbNotePad.SelectionStart; // use this if you want to keep cursor where it was
            //start += pasteText.Length;    // use this if want to move cursor to the end of pasted text
            rtbNotePad.Text = rtbNotePad.Text.Insert(rtbNotePad.SelectionStart, Clipboard.GetText(TextDataFormat.Text).ToString());

            rtbNotePad.SelectionStart = start;
           // rtbNotePad.Focus();
        }
    }

【讨论】:

  • 您正在直接更改文本,这将丢失所有以前的格式。用汉斯的方法!
  • @TaW 你是对的,但那不是我。这就是OP所做的。问题是关于在粘贴后处理光标位置,我的答案是问题的确切解决方案。
  • 什么是“hans”方法?我有没有提到我是构建 C# 的新手?所以我想确保我不仅使用正确的方法,而且是最好的方法。我可能不知道提问的确切方式。
猜你喜欢
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 2016-11-28
相关资源
最近更新 更多