问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在VB中如何获取TextBox的行数?

发布网友 发布时间:2022-04-30 21:57

我来回答

4个回答

热心网友 时间:2022-06-19 05:26

'获得光标位置(按字节计算,起如行和起始列均为0)
Private Function GetCurPos(ptPos As POINTAPI) As Long
Dim nLine As Long, nCol As Long

Call SendMessage(Me.Text1.hwnd, EM_GETSEL, 0, ptPos)
nLine = SendMessage(Me.Text1.hwnd, EM_LINEFROMCHAR, ptPos.x, ByVal 0&) '获得行号
nCol = ptPos.x - SendMessage(Me.Text1.hwnd, EM_LINEINDEX, -1, 0) '获得列号
GetCurPos = ptPos.x '光标位置(按字节计算)
ptPos.y = nLine
ptPos.x = nCol
End Function
'获得光标位置(按字符计算)
Private Function GetCurPosCh(ptPos As POINTAPI) As Long
Dim nLine As Long, nCol As Long
Dim ByteBuffer() As Byte

SendMessage Me.Text1.hwnd, EM_GETSEL, 0, ptPos
nLine = SendMessage(Me.Text1.hwnd, EM_LINEFROMCHAR, ptPos.x, ByVal 0&) '获得行号
nCol = ptPos.x - SendMessage(Me.Text1.hwnd, EM_LINEINDEX, -1, 0)
ReDim ByteBuffer(1024)
ByteBuffer(1) = 4
SendMessage Me.Text1.hwnd, EM_GETLINE, nLine, ByteBuffer(0)
ReDim Preserve ByteBuffer(nCol)
nCol = Len(StrConv(ByteBuffer, vbUnicode)) - 1 '获得列号
GetCurPosCh = Me.Text1.SelStart '光标位置(按字符计算)
ptPos.y = nLine + 1
ptPos.x = nCol + 1
Erase ByteBuffer
End Function

Call GetCurPosCh(ptPos)
GetTextInfo = " 第 " & ptPos.y & " 行 , 第 " & ptPos.x & " 列"

热心网友 时间:2022-06-19 05:26

首先,题主要明确这并不是你的程序出了什么问题,题主贴出的代码是检测 Text1.Text 中包含多少个 vbCrlf(即回车符)的,倘若 Text1.Text 某一行字符过长,在末尾处“折叠”到了下一行,其实准确的来说,在系统看来这仍然是一行字,因为系统识别两行字就是判断有无回车符或换行符(在C语言里面就是 \n),所谓的“多行”是题主肉眼识别出来的。

可以考虑用计算字符宽度和 Text1 的宽度来计算“每行”能容纳多少个字符,然后总字符数除以单位容纳字符数就时所谓的"行数"了。

热心网友 时间:2022-06-19 05:27

Const EM_GETLINECOUNT = 186
Private Declare Function SendMessageAsLong Lib "user32" _
     Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
     ByVal wParam As Long, ByVal lParam As Long) As Long

Private Sub Command1_Click()   
    Dim lCount As Long
    lCount = SendMessageAsLong(Text1.hWnd, EM_GETLINECOUNT, 0, 0)
    MsgBox lCount
End Sub

热心网友 时间:2022-06-19 05:27

自动换行的情况并不会生成vbcrlf符号。
只有按了回车键才会有vbcrlf符号。所以你用split分割vbcrlf当然只能得到1的结果。

对于自动换行的内容,不能算是多行,只算一行。如果非要计算行数,要结合字符宽度和文本框的宽度来计算了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
美的面包机和面要多久 美的面包机和面的时间要多长 美的面包机怎么用手动操作 如何用美的面包机发面 如何用美的面包机和面 美的面包机如何和面 CDR教程—教你如何使用CorelDRAW复制图形方法 苹果手机微信怎么换漂亮字体(苹果手机微信怎么换行输入) 有什么好用的app转换字体 手写转文字的软件 erp可以看评论地址吗 淘宝评论url是什么意思? 如何让VB中的TEXTBOX到了固定行数,自动清零 c# textbox 当前显示的行的序数 C#里面textbox有多行数。怎么求这多行的数和呢? ASP.NET的textbox控件TextMode属性为"MultiLine"时,如何控制输入的行数在5行内 TextBox控件的___属性值用于设置多行文本显示 在winform怎样使textbox显示多行数据 把.NET的WinForm中的textbox控件设置成多行显示,可是怎样使得它里面的内容呈多行的形式, C# textbox怎样获取里面文本有多少行??? c# textbox 只允许输入100行文字 C#如何在textbox内显示多行数据? TextBox 多行设置行数 怎么在c#设置textbox中多行的行数?谢谢了……… 如何让C#中的控件 TextBOX打开的内容是按照本身的行数显示,别混乱成一片?最好能+550240937帮我下 喜欢爸爸还是妈妈是什么梗? 女儿喜欢爸爸怎么办 我喜欢爸爸两百字 比较喜欢爸爸还是妈妈,怎么回答? 小女孩更喜欢爸爸怎么回事 男孩几岁喜欢爸爸 win7不能打韩文 添加了韩语输入法 打不出韩文 大屏幕拼接软件跟硬件的区别? 屏幕为何会闪烁? 什么是电脑的主要硬件? 拜托各位大侠 炫舞怎么成为回归玩家 QQ炫舞里点伴侣回归后,那信息会在伴侣的QQ显示么? QQ炫舞怎样才能成为回归玩家 在Excel中,把“数据系列格式”中的“数据标记”设为“无”,后来怎样恢复 qq炫舞里的回归玩家指的是什么 qq炫舞邀请老玩家回归筹码怎么领取 qq炫舞怎么查找玩家 excel中圆锥图数据系列格式图案内部填充效果在哪里呢,刚刚做作业没有找到,这个怎么做呢?? QQ炫舞游戏内的老友回归任务在哪? QQ炫舞怎么样才能算是回归玩家 qq炫舞回流玩家是什么意思 QQ炫舞1超过30天后回归玩家的问题 空气能压缩机不工作时,外机风扇一直运转怎么回事? 空气能热泵设置温度调好之后为什么外机不停的转? 空气能热泵开机之后设计温度是40度水温达到38度之后外机一直不停地转是怎么回? 空气能外机冻了还转吗 空气能热水器外机不停工作,却没有热水,求帮助急急急 空气能热水器 空气压缩机风扇是不是一直转