如何避免让我的Rich Text Box“滚动条”冻结?

问题描述 投票:1回答:3

我的问题是在.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();
c# .net winforms richtextbox
3个回答
1
投票

您是否只是尝试以编程方式在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代码语法)


0
投票

对我有帮助的只是两次调用refresh()方法。非常难看,但它确实起了作用。

嗯,经过更彻底的测试后,这个丑陋的修复证明并不是一个固定的解决方案。它有所帮助,但仍有一些故障。刷新();更新();似乎是一个更好的解决方案


0
投票

我遇到了同样的问题。我通过调用强制控件重绘的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()
© www.soinside.com 2019 - 2024. All rights reserved.