| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3713 人关注过本帖
标题:RichTextBox 显示行号
取消只看楼主 加入收藏
xxyyx82
Rank: 1
等 级:新手上路
帖 子:22
专家分:3
注 册:2015-7-16
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:4 
RichTextBox 显示行号

RichTextBox 显示行号,如何让两个 RichTextBox 联动呢?
程序代码:
Private Sub RichTextBox2_Change()
RichTextBox1.Text = ""
    For i = 1 To UBound(Split(RichTextBox2.Text, vbCrLf)) + 1
        RichTextBox1.Text = RichTextBox1.Text & i & vbCrLf
    Next
End Sub

如上在RichTextBox2下拉进度条和手动编辑满屏换行的时候,RichTextBox1怎么也一起跟着换行
新建位图图像.rar (11.2 KB)

新建文件夹.rar (2.3 KB)
搜索更多相关主题的帖子: RichTextBox 显示 Text Sub 换行 
2018-06-10 15:37
xxyyx82
Rank: 1
等 级:新手上路
帖 子:22
专家分:3
注 册:2015-7-16
收藏
得分:0 
回复 2楼 wds1
固定RichTextBox1大小,再输出行号,不联动也是一种思路。
VScroll应该可以用API取其刻度值。
我再试试,谢谢!

[此贴子已经被作者于2018-6-11 19:56编辑过]

2018-06-11 19:30
xxyyx82
Rank: 1
等 级:新手上路
帖 子:22
专家分:3
注 册:2015-7-16
收藏
得分:0 
回复 3楼 风吹过b
API好多啊,用Picture的话应该不用那么多
之前试过在Picture上Print,结果和RichTextBox间距不对,看这视频好像改一下某种字体就行了。
我再试试,谢谢!
2018-06-11 19:55
xxyyx82
Rank: 1
等 级:新手上路
帖 子:22
专家分:3
注 册:2015-7-16
收藏
得分:0 
回复 6楼 wds1
好的,谢谢!

继续用RichTextBox显示行的话,如下一个API取滚动条刻度值,放在Timer事件中,基本上完全满足要求了..
程序代码:
Private Declare Function FuckSendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const EM_GETFIRSTVISIBLELINE = &HCE

Private Sub Timer1_Timer()
RichTextBox1.Text = ""
i = FuckSendMessage(RichTextBox2.hwnd, EM_GETFIRSTVISIBLELINE, 0&, 0&) + 1 '取滚动条刻度值
    For j = i To UBound(Split(RichTextBox2.Text, vbCrLf)) + 1
        RichTextBox1.Text = RichTextBox1.Text & j & vbCrLf
            Next
End Sub


但是......汉字输入法会闪现,根本就打不了汉字,只可以输入英文
一样的代码用TEXT控件来输入是可以的,不会闪现,附件可以测试下
For j = i To UBound(Split(RichTextBox2.Text, vbCrLf)) + 1 应该是这里出问题了???

图片附件: 游客没有浏览图片的权限,请 登录注册

TEST.rar (2.59 KB)
2018-06-12 20:31
xxyyx82
Rank: 1
等 级:新手上路
帖 子:22
专家分:3
注 册:2015-7-16
收藏
得分:0 
回复 8楼 wds1
2个Timer是为了演示 TEXT与RichTextBox的区别
只放在Change事件中,没办法响应滚动条事件,

'-----------------------------------------------
异常应该还是在这里,UBound(Split(RichTextBox2.Text, vbCrLf)) ,为什么会冲突还不清楚。
既然获取TEXT1没有问题的话,那么.......再加一个RichTextBox3同步中转再获取其行数,是不是就不会冲突了?
试了下,可行,基本上全搞定啦。


程序代码:
Private Declare Function FuckSendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const EM_GETFIRSTVISIBLELINE = &HCE

Private Sub RichTextBox2_Change()
RichTextBox3.Text = RichTextBox2.Text   'RichTextBox3.Text同步RichTextBox2
End Sub

Private Sub Timer1_Timer()
RichTextBox1.Text = ""
i = FuckSendMessage(RichTextBox2.hwnd, EM_GETFIRSTVISIBLELINE, 0&, 0&) + 1 '取滚动条刻度值
    For j = i To UBound(Split(RichTextBox3.Text, vbCrLf)) + 1              '获取RichTextBox3行数
        RichTextBox1.Text = RichTextBox1.Text & j & vbCrLf
            Next
End Sub


2018-06-13 09:32
快速回复:RichTextBox 显示行号
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017389 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved