如何复制,粘贴,剪切FastColoredTextBox?

时间:2015-02-21 22:26:11

标签: c# winforms

我需要三个功能:复制,粘贴,剪切,

对于FastColoredTextBox ..到目前为止我的方法,工作已经完成,但之后,

光标的位置发生变化,我不知道如何将光标保持在哪里

之前。

这是我的方法:

    private void OnMouseMenuCut(object sender, EventArgs e)
    {
        var sPoint = rtbScript.SelectionStart;
        var ePoint = rtbScript.SelectionLength;

        var text = rtbScript.SelectedText;
        rtbScript.Text = rtbScript.Text.Remove(sPoint, ePoint);

        Clipboard.SetText(text.Replace("\n", "\r\n"));
        rtbScript.Text = rtbScript.Text.Insert(sPoint, text);
    }

    private void OnMouseMenuCopy(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(rtbScript.SelectedText)) return;
        Clipboard.SetText(rtbScript.SelectedText.Replace("\n", "\r\n"));

    }

    private void OnMouseMenuPaste(object sender, EventArgs e)
    {
        if (!Clipboard.ContainsText()) return;
        var index = rtbScript.SelectionStart;

        rtbScript.Text = rtbScript.Text.Insert(index, Clipboard.GetText());
    }

此外,如果有更好的方法来执行这些功能,请发布..

谢谢!

2 个答案:

答案 0 :(得分:1)

对于RichTextBox,您的代码比丢失Cursor位置有更多问题,它也会丢失所有格式!以下是应该更好的版本:

    private void OnMouseMenuCut(object sender, EventArgs e)
    {
        var sPoint = rtbScript.SelectionStart;
        var text = rtbScript.SelectedText;

        rtbScript.Cut();

        Clipboard.SetText(text.Replace("\n", "\r\n"));
        rtbScript.SelectionStart = sPoint;
    }

    private void OnMouseMenuCopy(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(rtbScript.SelectedText)) return;
        Clipboard.SetText(rtbScript.SelectedText.Replace("\n", "\r\n"));
    }

    private void OnMouseMenuPaste(object sender, EventArgs e)
    {
        if (!Clipboard.ContainsText()) return;
        var index = rtbScript.SelectionStart;

        rtbScript.SelectedText = Clipboard.GetText();
        rtbScript.SelectionStart = index + Clipboard.GetText().Length;
    }

注意:您永远不能更改RTB的Text属性,否则您将搞乱格式化!

既然你写了这个也适用于你的FastColoredTextBox我已取消删除解决方案..

答案 1 :(得分:0)

在当前版本的FCTB中,这些方法已经存在于FCTB.cs文件中。他们只需要联系起来。