向RichTextBox中插入行数据遇到的问题

mizuho_2006 2012-03-29 05:46:02
不停得更新Text属性,从服务器每接收到一个字符串就新增一行显示在RuthTextBox中,当内容满的时候不显示滚动条,而是将所有内容清空再从第一行显示。
另外,如果接收到的是一个多行文本,而最后RichTextBox放不下的时候也要清空从头显示。

请问如上效果如何实现?
...全文
157 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mizuho_2006 2012-03-29
  • 打赏
  • 举报
回复
因为字符串本身就带着"\r"这个字符,所以没有加。

谢谢您的指教
mngzilin 2012-03-29
  • 打赏
  • 举报
回复
另外再for循环里面加上这句:Application.DoEvents()

for (int i = 0; i < strs.Length; i++)
{
if (rtbSend.Lines.Length < rows)
{
rtbSend.AppendText(strs[i]+"\r");//用这句
}
else
{
Thread.Sleep(3000);
rtbSend.Clear();
rtbSend.AppendText(strs[i]+"\r");//用这句
}
Application.DoEvents();//加上这句去更新界面
}
mngzilin 2012-03-29
  • 打赏
  • 举报
回复
rtbSend.ScrollBars = RichTextBoxScrollBars.Horizontal;
显示水平滚动条,这样用\r可以进行换行
-----------------
rtbSend.Text += strs[i]+"\r";换为rtbSend.AppendText(strs[i]+"\r");效率能提高
mngzilin 2012-03-29
  • 打赏
  • 举报
回复
rtbSend.AppendText(strs[i]+"\r");

你怎么不加\r,不加只能一行了
mizuho_2006 2012-03-29
  • 打赏
  • 举报
回复
谢谢1L前辈提供思路
我写的代码是


string[] strs = saveString.SplitString(str); //分解成单行
int rows = rtbSend.Height / rtbSend.Font.Height;
for (int i = 0; i < strs.Length; i++)
{
if (rtbSend.Lines.Length < rows)
{
rtbSend.Text += strs[i];
}
else
{
Thread.Sleep(3000);
rtbSend.Clear();
rtbSend.Text += strs[i];
}
}


我现在接收的字符串都是多行的,所以先做分解。
其中让线程停止3秒时为了当最后要刷新清空时让用户先有一个心理准备。可是我做出的效果还是整个字符串去添加,而不是看到的一行一行的添加效果。比如最后RichTextBox放不下这个字符串了,它不会显示分解后的这个字符串的前几行,而是直接清空到下一页显示字符串的后面几行。因为他们是在一个for循环里的。。
不知道我表达的够不够清晰。。
mngzilin 2012-03-29
  • 打赏
  • 举报
回复
你用richTextBox1.Height / richTextBox1.Font.Height;计算无滚动条时候容纳的总行数

然后在AppendText时候判断richTextBox1.Lines.count是否==上面的结果:RichTextBox1.Clear();

如果AppendText的内容是多行文本,则把文本转换成string[] strlist,依次加入

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧