如何避免我的富文本框 "scroll bar," 冻结?

How do I avoid having my Rich Text Box, "scroll bar," freeze up?

我的问题是在 .NET 框架中使用 C# 创建一个包含 富文本框 (RTB) 控件的简单表单应用程序。

简而言之,我遇到的问题是,当尝试清除 RTB 的内容 (.Text) 时,滚动条不会消失。我想知道我使用 RTB 的方式是否存在任何固有的错误。抱歉,该站点 不允许我 到 post 图片。所以如果对"doesn't go away"的意思有什么误解,欢迎追问!

首先,我使用以下代码片段将数据写入盒子:

// append the new message
this.rtb_receive_0.Text += message;
this.rtb_receive_0.SelectionStart = this.rtb_receive_0.Text.Length;
this.rtb_receive_0.ScrollToCaret();

稍后,我使用以下代码清除 RTB 内容 (RTB.Text):

this.rtb_receive_0.Text = String.Empty;
this.rtb_receive_0.Refresh();

在上面的代码中,我尝试用"Refresh,"方法解决了我的问题。然而,它似乎并没有完成这项工作。

当我清除 RTB 内容时,滚动条没有消失...我注意到如果我抓取另一个 window 并将其拖到应用程序顶部,冻结的滚动条就会消失.另外,我可以最小化应用程序,然后再次最大化它,然后栏就会消失。不过,首先必须有一种方法来防止这个冻结的滚动条发生。

根据回答,这是阻止栏冻结的修复方法:

this.rtb_receive_0.Text = String.Empty;
this.rtb_receive_0.Clear();
this.rtb_receive_0.ScrollBars = RichTextBoxScrollBars.None;
this.rtb_receive_0.ScrollBars = RichTextBoxScrollBars.Vertical;
this.rtb_receive_0.Refresh();

您是否尝试过简单地以编程方式在 RTB 上设置滚动条 属性?

myRichTextBox.ScrollBars = RichTextBoxScrollBars.None;

编辑:我想我误解了您的需要。四处搜索,我在另一个论坛上发现了类似的 post:http://www.vbforums.com/showthread.php?793671-RESOLVED-RichTextBox-Visual-Bug

此用户正在根据列表视图中的选择设置 RTB 的值。当设置了一个新值并且不需要滚动条时,它不会重新绘制并仍然显示该条。

似乎添加 myRichTextBox.Clear(); myRichTextBox.Refresh(); 应该会有帮助。在这种情况下,用户也以编程方式设置 ScrollBars 属性。

此外,您能否确定在需要滚动条之前 RichTextBox 中可以容纳多少行文本?我想这可能会因机器上的系统设置而异,但您可能只能以编程方式检查 myrtb.Scrollbars = (myrtb.Lines.Length > X) ? Vertical : None;(请原谅伪代码语法)

对我有帮助的只是两次调用 refresh() 方法。非常丑陋,但它完成了工作。

嗯,在更彻底的测试之后,这个丑陋的修复被证明毕竟不是一个很好的修复。它有帮助,但仍然存在一些故障。 刷新(); 更新(); 似乎是更好的解决方案。

我遇到了同样的问题。我通过调用强制控件重新绘制的 Invalidate() 方法解决了这个问题。

Me.RichTextBox.Clear()
'Call Invalidate in order to force the RichTextBox to repaint.  I do this so that any 
'Visible Scroll bars are removed after clearing the Text
Me.RichTextBox.Invalidate()

我试过 Refresh();更新(); Invalidate();,但它对我不起作用。

我使用以下三行解决了这个问题:-

        RitchTextBox.Clear(); //Clearing text in RichTextBox
        RitchTextBox.ScrollBars = RichTextBoxScrollBars.None; //Remove scroll
        RitchTextBox.ScrollBars = RichTextBoxScrollBars.Vertical; //Again add scroll

尝试以上三行。它将 100% 有效。