vb.net中richtextbox控件字体颜色的设置

aishuishuichen 2011-11-29 11:15:34
两个本地记事本的内容进行比较,不同的用颜色进行标记
While (Not fs.EndOfStream)
str = fs.ReadLine()
str1 = ft.ReadLine()
RichTextBox1.Text += str + Chr(13) + Chr(10)
RichTextBox2.Text += str1 + Chr(13) + Chr(10)
If str.Length <= str1.Length Then
For i = 0 To str.Length - 1
If str.Substring(i, 1) <> str1.Substring(i, 1) Then
RichTextBox1.Select(i + b, 1)
RichTextBox1.SelectionColor = Color.Red
RichTextBox2.Select(i + a, 1)
RichTextBox2.SelectionColor = Color.Red
Else
RichTextBox1.Select(i + b, 1)
RichTextBox1.SelectionColor = Color.Black
RichTextBox2.Select(i + a, 1)
RichTextBox2.SelectionColor = Color.Black
End If
Next i


'For j = str.Length To str1.Length - 1
' RichTextBox2.Select(j, 1)
' RichTextBox2.SelectionColor = Color.Red
'Next j
'Else
'RichTextBox2.Select(str.Length + 1, 1)
'RichTextBox2.SelectionColor = Color.Red
'RichTextBox1.Text += Chr(13) + Chr(10)
'RichTextBox2.Select(str.Length, str1.Length - str.Length)
'RichTextBox2.SelectionColor = Color.Red
'RichTextBox1.Text += str1.Substring(str.Length, str1.Length - str.Length)
'RichTextBox2.Text += Chr(13) + Chr(10)
End If
b = b + str.Length + 1
a = a + str1.Length + 1
End While
为什么总改变最后一行的内容
(在线等答案)
谢谢!!!
...全文
818 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
苦苦的潜行者 2011-12-02
  • 打赏
  • 举报
回复
应公司一个部门要求,刚写了一个RichTextbox比对的程序,思路和你的差不多,给你帖一下.
控件需要一个button(btnCompare),两个RichTextBox(rtbCorrect rtbTarget)
我这边只对英文字符进行测试通过,没试过中文.
'比对
Private Sub btnCompare_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCompare.Click
Dim i As Integer
Dim ct1, ct2 As Long
Dim num1, num2 As Integer
num1 = rtbCorrect.Lines.Length
num2 = rtbTarget.Lines.Length
If num2 < num1 Then
i = CompareLine(num2)
ct1 = CountText(rtbCorrect, i)
rtbCorrect.Select(ct1, rtbCorrect.TextLength - ct1)
rtbCorrect.SelectionColor = Color.Blue
ElseIf num1 < num2 Then
i = CompareLine(num1)
ct2 = CountText(rtbTarget, i)
rtbTarget.Select(ct2, rtbTarget.TextLength - ct2)
rtbTarget.SelectionColor = Color.Red
Else
CompareLine(num2)
End If
End Sub

'统计小于n行的richtextbox中的字数(注意每一行后面有回车符)
Private Function CountText(ByVal rtb As RichTextBox, ByVal n As Integer) As Long
Dim sum As Long = 0
If n = 0 Then
Return 0
Else
For i As Integer = 0 To n - 1
sum += rtb.Lines(i).Length + 1 '千万别忘记最后+1,回车符占位一格
Next
Return sum
End If
End Function

'行对行的比对
Private Function CompareLine(ByVal LineSum As Integer) As Integer
Dim ct1, ct2 As Integer
Dim str1, str2 As String
Dim i, j As Integer
For i = 0 To LineSum - 1
str1 = rtbCorrect.Lines(i)
str2 = rtbTarget.Lines(i)
ct1 = CountText(rtbCorrect, i)
ct2 = CountText(rtbTarget, i)
If str1 <> str2 Then
If str2.Length < str1.Length Then
For j = 0 To str2.Length - 1
If str2.Substring(j, 1) <> str1.Substring(j, 1) Then
rtbTarget.Select(j + ct2, 1)
rtbTarget.SelectionColor = Color.Red
rtbCorrect.Select(j + ct1, 1)
rtbCorrect.SelectionColor = Color.Blue
End If
Next
rtbCorrect.Select(j + ct1, str1.Length - j)
rtbCorrect.SelectionColor = Color.Blue
ElseIf str2.Length > str1.Length Then
For j = 0 To str1.Length - 1
If str2.Substring(j, 1) <> str1.Substring(j, 1) Then
rtbCorrect.Select(j + ct1, 1)
rtbCorrect.SelectionColor = Color.Blue
rtbTarget.Select(j + ct2, 1)
rtbTarget.SelectionColor = Color.Red
End If
Next
rtbTarget.Select(j + ct2, str2.Length - j)
rtbTarget.SelectionColor = Color.Red
Else
For j = 0 To str2.Length - 1
If str2.Substring(j, 1) <> str1.Substring(j, 1) Then
rtbTarget.Select(j + ct2, 1)
rtbTarget.SelectionColor = Color.Red
rtbCorrect.Select(j + ct1, 1)
rtbCorrect.SelectionColor = Color.Blue
End If
Next
End If
End If
Next
Return i
End Function
苦苦的潜行者 2011-11-29
  • 打赏
  • 举报
回复
因为你每次
RichTextBox1.Text += str + Chr(13) + Chr(10)
RichTextBox2.Text += str1 + Chr(13) + Chr(10)
之后,前面标红的字体又重置为黑色,所以只有最后一行才是红色,

你可以测试一下
操作完之后加上一个空行,是不是你最后一行标红的也没有了.
RichTextBox1.Text += "" + Chr(13) + Chr(10)
RichTextBox2.Text += "" + Chr(13) + Chr(10)
aishuishuichen 2011-11-29
  • 打赏
  • 举报
回复
有什么解决的方法吗???
急需解决方法
与6.0版相比,件6.01版的主要更改如下: 1、解决6.0版在XP及Windows Server 2008等操作系统下打印预览及打印不正确的问题(第1页正常,其他各页全部是空白)。 件主要功能: 1、强大的DataGridView打印功能,不仅可以以多种形式(普通打印、分栏打印、跨页打印、工资条打印)打印DGV表格,基本上能完全按DGV件本身设置的格式如字体、字号、背景颜色、前景颜色、单元格对齐方式等打印出来,文字图像都可以打印,而且是完全根据表格当前的显示顺序进行打印的,基本上做到了所见即所得的打印。 2、报表设计功能。报表模板设计组件EasyReport可以设计普通报表、分组报表、套打模板等,以DataGridView为数据源。件的位置以毫米为计量单位,定位准确,很适合套打单据设计。 3、图表打印功能。5.2版件新增了一个Chartlet的组件,使用非常方便,可以生成柱形图、饼图、折线图等多种图形,而且可以设置2D或3D效果,既可以在打印打印出来,也可以在Graphics对象显示。 4、文本打印输出功能,件提供多个文本打印重载函数,打印文本时,如果需要,件会自动换行和换页打印输出。还增加了以指定行间距及字符间距打印文本的功能,可以用固定行距,也可以用单倍或多倍行距打印文本。 5、绘图功能,基本上.NET的GDI+的绘图函数(如直线、矩形、路径、多边形、曲线等)都有,只有个别函数的名称有点区别。 6、支持同一文档多种版面格式打印(类似于Word的节的功能):对同一份文档,不同的页面可以设置不同的格式(纸张大小、纸张方向、页边距),只需要在新增一页时在NewPage方法指定要使用的页面格式即可,使用非常简单。 7、报表文件保存功能。本件允许将当前打印预览的内容保存为报表文件,以后使用本件重新打开该报表文件即可重现原来保存报表时的打印内容。 8、数据导出功能,可以将DataGridView导出为Excel\PDF\RTF\HTML文件,5.7版件使用开源的NPOI导出Excel,速度非常快,效果非常好。 9、强大的容器件打印功能(DrawPanel函数)。借助该函数,您只需要在您的容器设计好要打印的内容及打印内容的相对位置,件轻松帮你打印出来(如果超过一页,件会自动换页续打)。 10、5.6版新增的SimpleReport组件允许您在一个方案文件管理多个打印方案,在打印预览时能自由在各个打印方案之间切换。 11、RichTextBox件的RTF文本打印功能。 12、页眉页脚既可打印文字,也可打印图像,或者即打印图像又打印输出文字。 13、多表头(跨行跨列的复杂表头)打印功能,多表头组件支持多表头显示与打印、单元格内容的合并显示、打印与导出。 14、自定义纸张支持功能。 15、直接打印窗口的TreeView件功能。 16、打印窗口的ListView功能。 17、斜线表头打印功能。 18、各种条形码(包括二维码)打印功能。 19、5.7版件增加了使用开源的NPOI从Excel文件(支持2003与2007格式)导入数据到DataGridView的功能,以及DataGridView的复制与粘贴功能。
本DataGridView打印件和.NET打印件5.6版(含报表模板设计组件)2014年6月22日修改完成,完全免费,在.NET2.0及以上环境下都可以使用(VB打印、C#打印都是可以的),有帮助文档与使用实例。 与上一版本的5.5版相比,新件5.6版的主要更改如下: 1、增加了一个新打印组件SimpleReport组件,该组件与DGVPrint组件一样在运行时可进行打印参数设置,但比DGVPrint组件功能更强大,可以自动管理多个打印方案,在打印预览时可以自由在各个打印方案之间切换;可以在打印参数设置窗口动态定义多表头,还可以像EasyReport组件一样设置和使用参数变量(具体使用效果参见实例程序); 2、解决了EasyReport组件在插入变量参数时,变量参数未排序导致查找不方便的问题; 3、在打印预览界面添加了简单的双面打印功能。(打印预览界面工具栏的“打印\双面打印”菜单); 4、其他一些完善,比如DGVPrint组件设置的行高无效等问题。 本件特色: 1、强大的DataGridView打印功能,不仅可以以多种形式(普通打印、分栏打印、跨页打印、工资条打印)打印DGV表格,基本上能完全按DGV件本身设置的格式如字体、字号、背景颜色、前景颜色、单元格对齐方式等打印出来,文字图像都可以打印,而且是完全根据表格当前的显示顺序进行打印的,基本上做到了所见即所得的打印。 2、报表设计功能。报表模板设计组件EasyReport与WebEasyReport组件可以设计普通报表、分组报表、套打模板等,分别以DataGridView为数据源。件的位置以毫米为计量单位,定位准确,很适合套打单据设计。 3、强大的图表打印功能。5.2版件新增了一个Chartlet的组件,使用非常方便,可以生成柱形图、饼图、折线图等多种图形,而且可以设置2D或3D效果,既可以在打印打印出来,也可以在Graphics对象显示。 4、分组汇总打印DataGridVeiw功能,每组还可以自动换新页打印,还可以自动增加行号。 5、强大的文本打印输出功能,件提供多个文本打印重载函数,打印文本时,如果需要,件会自动换行和换页打印输出。还增加了以指定行间距及字符间距打印文本的功能,可以用固定行距,也可以用单倍或多倍行距打印文本。 6、强大的绘图功能,基本上.NET的GDI+的绘图函数(如直线、矩形、路径、多边形、曲线等)都有,只有个别函数的名称有点区别。 7、支持同一文档多种版面格式打印(类似于Word的节的功能):对同一份文档,不同的页面可以设置不同的格式(纸张大小、纸张方向、页边距),只需要在新增一页时在NewPage方法指定要使用的页面格式即可,使用非常简单。 8、报表文件保存功能。本件允许将当前打印预览的内容保存为报表文件,以后使用本件重新打开该报表文件即可重现原来保存报表时的打印内容。 9、Excel导出功能,可以将DataGridView和GridView导出为Excel文件,5.2版件还增加了不依赖Office的导出Excel功能,而且速度非常快,5.4版还增加了合并单元格的导出功能。 10、打印DataGridView时的打印方案保存与读取功能。可以将当前打印参数保存为打印方案文件,或者从保存的打印方案文件读取打印参数。 11、水印打印功能。根据需要,可以在页面打印或不打印以半透明空心文字打印水印。 12、强大的容器件打印功能(DrawPanel函数)。借助该函数,您只需要在您的容器设计好要打印的内容及打印内容的相对位置,件轻松帮你打印出来(如果超过一页,件会自动换页续打)。 13、特殊文字效果打印功能。件具有打印浮雕文字、阴影文字、空心文字、块文字的功能。 14、页眉页脚既可打印文字,也可打印图像,或者即打印图像又打印输出文字。 15、图像与图标打印输出功能。 16、多表头(跨行跨列的复杂表头)打印功能,多表头组件支持多表头显示与打印、单元格内容的合并显示、打印与导出。 17、自定义纸张支持功能。 18、纸张背景图片设置打印功能。 19、.NET4.0支持功能(是单独的一个文件)。 20、直接打印窗口的TreeView件功能。 21、打印窗口的ListView功能。 22、RichTextBox件的RTF文本打印功能。 23、斜线表头打印功能(5.4版新增)。 24、二维码打印功能(5.5版本增加)。 25、5.6版新增的SimpleReport组件允许您在一个方案文件管理多个打印方案,在打印预览时能自由在各个打印方案之间切换。 我将持续改进该件,并将不断推出件的新版本,要查看或下载件的升级版本,请登陆网站:http://myyouping.download.csdn.n
本DataGridView打印件和.NET打印件5.5版(含报表模板设计组件)2014年2月8日修改完成,完全免费,在.NET2.0及以上环境下都可以使用(VB打印、C#打印都是可以的),有帮助文档与使用实例。 与上一版本的5.4版相比,新件5.5版的主要更改如下: 1、对件进行了完善,DGVPrint、VB2008Print、EasyReport组件的打印预览速度有较大的提升; 2、VB2008Print与EasyReport添加了二维码打印的功能,该功能使用开源的Zxing.NET实现; 3、添加了DrawDGVEx函数,一方面可以以DGVprint对象的参数在VB2008Print组件打印,另一方面提供了并排打印多个表格的重载函数; 4、DGVPrint组件添加了报表头与报表尾内容的设置属性和参数; 5、DGVPrint与VB2008Print组件在以工资条方式打印表格时,添加了是否自动换行续打的功能(即,如果工资条列太多在一行打印不下时,可以指定自动换行续打); 6、修改了EasyReport组件的设计界面,每个区域的属性放在属性窗口显示; 7、EasyReport组件添加了简单的多栏打印支持功能; 8、VB2008Print组件添加了PrintDGVFixedWidth函数,方便将DataGridView按指定宽度进行打印; 9、去掉了网页打印功能(因为在IE11下没法使用,所以干脆去掉),去掉了打印RDLC报表的功能; 10、其他一些完善,比如在导出Excel时,如果Columheader不可见,则不导出;解决了快速导出Excel时部分特殊列没有表格线问题(比如是数值列,但使用了%等格式);VB2008Print组件添加了PageScale可以指定打印时的缩放比例等等。 本件特色: 1、强大的DataGridView打印功能,不仅可以以多种形式(普通打印、分栏打印、跨页打印、工资条打印)打印DGV表格,基本上能完全按DGV件本身设置的格式如字体、字号、背景颜色、前景颜色、单元格对齐方式等打印出来,文字图像都可以打印,而且是完全根据表格当前的显示顺序进行打印的,基本上做到了所见即所得的打印。 2、报表设计功能。报表模板设计组件EasyReport与WebEasyReport组件可以设计普通报表、分组报表、套打模板等,分别以DataGridView为数据源。件的位置以毫米为计量单位,定位准确,很适合套打单据设计。 3、强大的图表打印功能。5.2版件新增了一个Chartlet的组件,使用非常方便,可以生成柱形图、饼图、折线图等多种图形,而且可以设置2D或3D效果,既可以在打印打印出来,也可以在Graphics对象显示。 4、分组汇总打印DataGridVeiw功能,每组还可以自动换新页打印,还可以自动增加行号。 5、强大的文本打印输出功能,件提供多个文本打印重载函数,打印文本时,如果需要,件会自动换行和换页打印输出。还增加了以指定行间距及字符间距打印文本的功能,可以用固定行距,也可以用单倍或多倍行距打印文本。 6、强大的绘图功能,基本上.NET的GDI+的绘图函数(如直线、矩形、路径、多边形、曲线等)都有,只有个别函数的名称有点区别。 7、支持同一文档多种版面格式打印(类似于Word的节的功能):对同一份文档,不同的页面可以设置不同的格式(纸张大小、纸张方向、页边 距),只需要在新增一页时在NewPage方法指定要使用的页面格式即可,使用非常简单。 8、报表文件保存功能。本件允许将当前打印预览的内容保存为报表文件,以后使用本件重新打开该报表文件即可重现原来保存报表时的打印内容。 9、Excel导出功能,可以将DataGridView和GridView导出为Excel文件,5.2版件还增加了不依赖Office的导出Excel功能,而且速度非常快,5.4版还增加了合并单元格的导出功能。 10、打印DataGridView时的打印方案保存与读取功能。可以将当前打印参数保存为打印方案文件,或者从保存的打印方案文件读取打印参数。 11、水印打印功能。根据需要,可以在页面打印或不打印以半透明空心文字打印水印。 12、强大的容器件打印功能(DrawPanel函数)。借助该函数,您只需要在您的容器设计好要打印的内容及打印内容的相对位置,件轻松帮你打印出来(如果超过一页,件会自动换页续打)。 13、特殊文字效果打印功能。件具有打印浮雕文字、阴影文字、空心文字、块文字的功能。 14、页眉页脚既可打印文字,也可打印图像,或者即打印图像又打印输出文字。 15、图像与图标打印输出功能。 16、多表头(跨行跨列的复杂表头)打印功能,多表头组件支持多表头显示与打印、单元格内容的合并显示、打印与导出。 17、自定义纸张支持功能。 18、纸张背景图片设置打印功能。 19、.NET4.0支持功能(是单独的一个文件) 20、直接打印窗口的TreeView件功能 21、打印窗口的ListView功能。 22、RichTextBox件的RTF文本打印功能。 23、斜线表头打印功能(5.4版新增)。 24、二维码打印功能(5.5版本增加)。 我将持续改进该件,并将不断推出件的新版本,要查看或下载件的升级版本,请登陆网站:http://myyouping.download.csdn.net/ 。具体使用方法请参见帮助文件与实例文件,如有疑问或好的建议,请与我联系: 邮箱:myyouping@139.com Q Q:479781502

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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