相关疑难解决方法(0)

如何自动滚动到多行文本框的底部?

我有一个文本框,其.Multiline属性设置为true.我会定期添加新的文本行.我希望每当添加新行时,文本框都会自动滚动到最底部的条目(最新的条目).我该如何做到这一点?

c# scroll textbox winforms

278
推荐指数
8
解决办法
25万
查看次数

WinForms C#中的优雅日志窗口

我正在寻找一种有效的方法来实现Windows窗体应用程序的日志窗口.在过去,我已经使用TextBox和RichTextBox实现了几个,但我仍然不完全满意这个功能.

此日志旨在向用户提供各种事件的近期历史记录,主要用于数据收集应用程序,其中可能会对特定事务的完成方式感到好奇.在这种情况下,日志不必是永久性的,也不必保存到文件中.

首先,一些提出的要求:

  • 高效快速; 如果快速连续地将数百行写入日志,则需要消耗最少的资源和时间.
  • 能够提供最多2000行左右的可变回滚.更长的时间是不必要的.
  • 突出和颜色是首选.不需要字体效果.
  • 达到回滚限制时自动修剪线条.
  • 添加新数据时自动滚动.
  • 奖励但不是必需的:在手动交互期间暂停自动滚动,例如用户正在浏览历史记录.

到目前为止我一直用来编写和修剪日志:

我使用以下代码(我从其他线程调用):

// rtbLog is a RichTextBox
// _MaxLines is an int
public void AppendLog(string s, Color c, bool bNewLine)
{
    if (rtbLog.InvokeRequired)
    {
        object[] args = { s, c, bNewLine };
        rtbLog.Invoke(new AppendLogDel(AppendLog), args);
        return;
    }
    try
    {
        rtbLog.SelectionColor = c;
        rtbLog.AppendText(s);
        if (bNewLine) rtbLog.AppendText(Environment.NewLine);
        TrimLog();
        rtbLog.SelectionStart = rtbLog.TextLength;
        rtbLog.ScrollToCaret();
        rtbLog.Update();
    }
    catch (Exception exc)
    {
        // exception handling
    }
}

private void TrimLog()
{
    try
    {
        // Extra …
Run Code Online (Sandbox Code Playgroud)

c# logging winforms

56
推荐指数
6
解决办法
5万
查看次数

标签 统计

c# ×2

winforms ×2

logging ×1

scroll ×1

textbox ×1