如何避免我的富文本框 "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% 有效。
我的问题是在 .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% 有效。