当文本快速向下滚动时,如何避免richTextBox的闪烁?

时间:2012-10-26 00:54:03

标签: c#

我有一个richTextBox,我在recrusive函数中一直更新文本。 在这种情况下,我将目录从我的硬盘添加到richTextBox。 当文本下到右边的栏时,我就这样做了,所以如果我想查看较旧的文本,我需要向上滚动。

Thep roblem就是当我从硬盘添加目录作为字符串时,它的工作速度非常快,并使右边的文本和条形闪烁或跳跃。

这是我在构造函数中所做的设置:

richTextBox1.TabStop = false;
richTextBox1.ReadOnly = true;
richTextBox1.BackColor = Color.White;
richTextBox1.Cursor = Cursors.Arrow;
richTextBox1.Enter += richTextBox1_Enter;
richTextBox1.BackColor = Color.White;

这是ruchTextBox文本更改事件:

private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            richTextBox1.SelectionStart = richTextBox1.Text.Length;
            richTextBox1.ScrollToCaret();
        }

这使得richTextBox变得昏暗,所以我总是看到新的文字喂养,如果我想看到更早的文字,我需要抓住右边的栏。

这是我在recrusive函数中将文本添加到richTextBox的方式:

this.Invoke(new MethodInvoker(delegate { ColorText.Texts(richTextBox1, "Level: " + levels.ToString(), Color.Green); }));
                this.Invoke(new MethodInvoker(delegate { ColorText.Texts(richTextBox1, "   Loading The Url:   ", Color.Red); }));
                this.Invoke(new MethodInvoker(delegate { ColorText.Texts(richTextBox1, url + "...", Color.Blue); }));

这是我用来从硬盘读取目录并将其作为List返回的函数

private List<string> offline(string targetDirectory)
        {
            if (targetDirectory.StartsWith("http://"))
            {
                targetDirectory = targetDirectory.Substring("http://".Length);
            }
            List<string> directories = new List<string>();

            try
            {
                string[] dirs = Directory.GetDirectories(targetDirectory,"*.*",SearchOption.TopDirectoryOnly);
                for (int i = 0; i < dirs.Length; i++)
                {
                    string t = "http://" + dirs[i];
                    directories.Add(t);
                }
            }
            catch
            {

            }


            return directories;

        }

1 个答案:

答案 0 :(得分:0)

可以在更新时禁用表单上的绘图。

您可以发送一条名为WM_SETREDRAW的消息来禁用和启用绘图。

http://fgaillard.com/2011/02/the-unfortunate-effect-of-wm_setredraw/