RichTextBox中如何取得当前行号,光标位置及总行数?

thinkingCsharp 2008-11-02 05:17:57
如题
...全文
1101 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
guyun0 2009-06-12
  • 打赏
  • 举报
回复
在字体大小,窗口不发生变化的情况下,可以知道每行最大多少个字符,知道了当前光标的位置,就可以算出在第几行了。
zuoxingyu 2008-11-20
  • 打赏
  • 举报
回复
标准答案来了
lihonggen0 2008-11-02
  • 打赏
  • 举报
回复
请在窗体上放三个label和一个Richtextbox



Private Declare Function SendMessage 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
Const EM_LINEFROMCHAR = &HC9
Const EM_GETLINECOUNT = &HBA
Const EM_LINEINDEX = &HBB

Public Function TopLineIndex(txtBox As RichTextBox) As Long
TopLineIndex = SendMessage(txtBox.hwnd, EM_GETFIRSTVISIBLELINE, 0&, 0&)
End Function

Public Function GetLineFromChar(txtBox As RichTextBox, CharPos As Long) As Long
GetLineFromChar = SendMessage(txtBox.hwnd, EM_LINEFROMCHAR, CharPos, 0&)
End Function

Public Function LineCount(txtBox As RichTextBox) As Long
LineCount = SendMessage(txtBox.hwnd, EM_GETLINECOUNT, 0&, 0&)
End Function

Public Function ColIndex(txtBox As RichTextBox, Lops As Long) As Long
ColIndex = SendMessage(txtBox.hwnd, EM_LINEINDEX, Lops, 0)
End Function

Private Sub RichTextBox1_SelChange()
Dim lngLineIndex As Long
Dim lngLineCount As Long
Dim lngColIndex As Long
lngLineIndex = GetLineFromChar(RichTextBox1, RichTextBox1.SelStart)
lngLineCount = LineCount(RichTextBox1)
lngColIndex = SendMessage(RichTextBox1.hwnd, EM_LINEINDEX, lngLineIndex, 0)
Label1.Caption = "当前行号: " & lngLineIndex + 1
Label2.Caption = "当前位置: " & lngColIndex
Label3.Caption = "总行数: " & lngLineCount
End Sub

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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