0

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

问题是当我从硬盘添加目录作为字符串时,它的工作速度非常快,并使右侧的文本和栏闪烁或跳跃。

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

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 向下滚动,所以如果我想看到之前添加的文本,我总是会看到新的文本输入,我需要抓住右边的栏。

这就是我在递归函数中将文本添加到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); }));

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

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;

        }
4

1 回答 1

0

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

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

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

于 2012-10-26T01:11:01.783 回答