我的问题是在.NET框架中使用C#创建一个包含富文本框(RTB)控件的简单表单应用程序。
简而言之,我遇到的问题是,当试图清除RTB的内容(.Text)时,滚动条不会消失。我想知道我使用RTB的方式是否存在任何内在错误。我道歉,但该网站不允许我发布图片。因此,如果对“不会消失”的含义存在误解,请询问!
首先,我使用以下代码片段将数据写入框中:
// 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();
在上面的代码中,我尝试用“刷新”方法修复我的问题。但它似乎并没有完成这项工作。
当我清除RTB内容时,滚动条不会消失......我注意到如果我抓住另一个窗口并将其拖到应用程序的顶部,那么冻结的滚动条就会消失。此外,我可以最小化应用程序,然后再次最大化它,条形将消失。必须有一种方法可以防止这个冻结的滚动条在第一时间发生。
根据答案,这是阻止酒吧冻结的解决办法:
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上设置Scrollbars属性?
myRichTextBox.ScrollBars = RichTextBoxScrollBars.None;
编辑:我想我误解了你需要的东西。搜索周围,我在另一个论坛上找到了类似的帖子: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;
(请原谅psuedo代码语法)
对我有帮助的只是两次调用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()