获取文本框当前光标所在的行和列

 

<System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)> _
Public Structure HWND__

'''int
Public unused As Integer
End Structure

Partial Public Class TextBoxHelper

Const EM_LINEFROMCHAR As Integer = &HC9
Const EM_LINEINDEX As Integer = &HBB
Const EM_GETLINE As Integer = &HC4
Const EM_GETSEL As Integer = &HB0



<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Ansi, EntryPoint:="SendMessageW")> _
Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
End Function


''' <summary>
''' 获取指定文本框当前光标所在的行和列
''' </summary>
''' <param name="texthwnd"></param>
''' <param name="iLineX"></param>
''' <param name="iLineY"></param>
''' <remarks></remarks>
Public Sub GetCaretPos(ByVal texthwnd As System.IntPtr, ByRef iLineX As Long, ByRef iLineY As Long)

Dim l, l1, l2 As Integer
l
= SendMessage(texthwnd, EM_LINEINDEX, -1, 0)

iLineY
= SendMessage(texthwnd, EM_LINEFROMCHAR, l, 0)
iLineY
+= 1

iLineX
= SendMessage(texthwnd, EM_GETSEL, 0, 0)
iLineX
= CInt(iLineX / 2 ^ 16) - l + 1

End Sub

End Class

 

 

 

测试调用:
Private Sub RichTextBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RichTextBox1.MouseDown
Dim h As New TextBoxHelper
Dim l, c As Long
h.GetCaretPos(
Me.RichTextBox1.Handle, c, l)
Me.Label1.Text = String.Format("L:{0};C{1}", l, c)
End Sub

 

转载于:https://www.cnblogs.com/zqonline/archive/2009/12/22/1629568.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值