插入richtextbox的顶部

时间:2009-11-30 09:59:27

标签: c# richtextbox

这段代码有什么问题?试图让我的文本插入文本框的开头而不是底部。

private void execute_Click(object sender, EventArgs e){
  startFinshBox.Text = "Start Time: " + printTime()+"";
  startFinshBox.Text.Insert(0,printTime()+": Retrieving Results...\n");
}

但它不会将第二行插入rtb。我已尝试使用startFinishBox.SelectionStart = 0,它没有任何区别。我错过了别的什么吗?

谢谢,Psy

3 个答案:

答案 0 :(得分:4)

startFinshBox.Text是一个字符串,它是C#中的不可变类型。 string.Insert()将返回修改后的字符串作为结果,但是您丢弃它的代码。要使其工作,您必须将代码更改为:

private void execute_Click(object sender, EventArgs e){
  startFinshBox.Text = "Start Time: " + printTime()+"";
  startFinshBox.Text = startFinshBox.Text.Insert(0,printTime()+": Retrieving Results...\n");
}

答案 1 :(得分:0)

TextBox上的SelectionStart属性将确定将从中选择或插入文本。

使用此代码在文本框控件的开头插入代码:

TextBox.SelectionStart = 0;
TextBox.SelectedText = "Start time: " + printTime();

答案 2 :(得分:0)

ShowText 在 RichTextBox 的顶部插入一个新行。 Invoke 使您能够从另一个线程调用它。 LineLimit 在达到 LineLimit 后删除最后一行。 如果您将 RichTextBox_ContentsResized 事件处理程序添加到您的控件中,它会自动调整其大小。

    public bool? ShowText(string pText)
    {
        try
        {
            if (InvokeRequired)
                return Invoke(new Func<string, bool?>(ShowText), pText) as bool?;

            rtbRemoteControl.Text = rtbRemoteControl.Text.Insert(0, $"{DateTime.Now:HH:mm:ss} - {pText}\n");

            var lLineCount = rtbRemoteControl.Lines.Length;
            const int lLineLimit = 500;
            if (lLineCount > lLineLimit)
                rtbRemoteControl.Lines = rtbRemoteControl.Lines.Take(lLineCount - 1).ToArray();
        }
        catch
        {
            return false;
        }
        return true;
    }

    private void RichTextBox_ContentsResized(object pSender, ContentsResizedEventArgs e)
    {
        const int margin = 5;
        var lSender = pSender as RichTextBox;
        if (lSender == null)
            return;
        lSender.ClientSize = new Size(e.NewRectangle.Width + margin,  e.NewRectangle.Height + margin);
    }