取得TextBox、RichTextBox光标所在的行和列(支持中文)

转载 2008年05月01日 05:41:00
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

'************************************************************
'功能:取得TextBox、RichTextBox光标所在的行和列

'支持中文,一个汉字算一列
'有问题请给我写邮件
'作者:Matrix
'邮件:ASPBIT@163.COM
'2003-01-24修正了马虎的错误
'************************************************************

Option Explicit

Public Const WM_USER = &H400
Public Const EM_EXGETSEL = WM_USER + 52

Public Const EM_LINEFROMCHAR = &HC9
Public Const EM_LINEINDEX = &HBB
Public Const EM_GETSEL = &HB0

Public Type CHARRANGE
    cpMin As Long
    cpMax As Long
End Type

Public Type POINTAPI
        x As Long
        y As Long
End Type

Public Declare Function SendMessage Lib "user32" Alias _
        "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As _
        Long, ByVal wParam As Long, lParam As Any) As Long

Public Declare Sub CopyMemory Lib "kernel32" Alias _
        "RtlMoveMemory" (pDst As Any, pSrc As Any, _
        ByVal ByteLen As Long)


'取得光标所在的行和列
Public Function GetCurPos(ByRef TextControl As Control) As POINTAPI
    Dim LineIndex As Long
    Dim SelRange As CHARRANGE
    Dim TempStr As String
    Dim TempArray() As Byte
    Dim CurRow As Long
    Dim CurPos As POINTAPI

    TempArray = StrConv(TextControl.Text, vbFromUnicode)

    '取得当前被选中文本的位置 适用于 RichTextBox
    'TextControl 用 EM_GETSEL 消息
    Call SendMessage(TextControl.hWnd, EM_EXGETSEL, 0, SelRange)

    '根据参数wParam指定的字符位置返回该字符所在的行号
    CurRow = SendMessage(TextControl.hWnd, EM_LINEFROMCHAR, SelRange.cpMin, 0)

    '取得指定行第一个字符的位置
    LineIndex = SendMessage(TextControl.hWnd, EM_LINEINDEX, CurRow, 0)

    If SelRange.cpMin = LineIndex Then
        GetCurPos.x = 1
    Else

        TempStr = String(SelRange.cpMin - LineIndex, 13)

        '复制当前行开始到选择文本开始的文本
        CopyMemory ByVal StrPtr(TempStr), ByVal StrPtr(TempArray) + LineIndex, SelRange.cpMin - LineIndex
        TempArray = TempStr

        '删除无用的信息
        ReDim Preserve TempArray(SelRange.cpMin - LineIndex - 1)

        '转换为 Unicode
        TempStr = StrConv(TempArray, vbUnicode)

        GetCurPos.x = Len(TempStr) + 1
    End If
    GetCurPos.y = CurRow + 1
End Function

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

取得TextBox、RichTextBox光标所在的行和列(支持中文)修正

************************************************************功能:取得TextBox、RichTextBox光标所在的行和列支持中文,一个汉...
  • ASPBIT
  • ASPBIT
  • 2003-01-24 17:36:00
  • 1169

C# 在textbox里获取光标所在的行和列

最简单的得到行和列的方法: int totalline = textBox1.GetLineFromCharIndex(textBox1.Text.Length) + 1;//得到总行数。该行数会随着...
  • xuehanjiang
  • xuehanjiang
  • 2014-03-12 18:51:14
  • 3058

获得光标在多行textbox中的行与列

Public Function checkrow() As StringDim row As Integer = Me.TextBox1.SelectionStartDim i As IntegerD...
  • feb9903
  • feb9903
  • 2006-12-06 11:31:00
  • 482

C# RichTextBox 获取当前光标的行号列号

获得行和列的快速方法要用到  GetFirstCharIndexOfCurrentLine()、.GetLineFromCharIndex(int  index)、SelectionStart 自定义...
  • ou832339
  • ou832339
  • 2014-03-18 03:13:41
  • 3019

C#语言编写的WinForm程序隐藏TextBox或RichTextBox的光标

首先这里说的光标指的是闪烁的录入位置处的标记位。TextBox和RichTextBox的解决隐藏光标的方式 1> 将TextBox的TabStop属性设置为false; 2> 在程序中相应位置加入...
  • XueminXu
  • XueminXu
  • 2012-12-05 20:01:25
  • 2436

精彩编程与编程技巧-如何取得RichTextBox控件中光标所在行的值?...

  • 2009年10月10日 23:34
  • 547B
  • 下载

c# 获取文本框(TextBox)中鼠标,光标位置

文本框(TextBox)中的鼠标位置和光标位置是两个不同的概念,鼠标位置是要点击鼠标后获取到,而光标位置却是实时就要获取到,也就是用户输入一个字符,这个位置就要改变一次,不需要鼠标的任何操作的。 下面...
  • hejialin666
  • hejialin666
  • 2010-03-17 08:50:00
  • 11582

获取DataGrid中当前光标所在的行和列

1、使用MouseMove事件获取光标位置(x,y)。2、用DBGrid.MouseCoord(x,y).X可取得列号,用DBGrid.MouseCoord(x,y).Y可取得行号。  ...
  • cyai
  • cyai
  • 2008-02-22 15:58:00
  • 1464

【c#】关于设置RichTextBox背景透明+无光标只读状态

今天在设置一个软件的RichTextBox的时候,需要一个背景透明,不可编辑的文本展示框,而且还要向文本框中不停地追加数据,所以我选择修改winform自带的richtextbox组件。 首先,我们...
  • z3237109
  • z3237109
  • 2016-09-22 14:36:45
  • 1589

C#实现TextBox、RichTextBox语法高亮

利用VS2005编写文本编辑器,可以在TextBox、RichTextBox里实现语法高亮的。下面是使用RichTextBox控件实现语法高亮的方法,TextBox控件的实现方法和此类似。1     ...
  • snzy521
  • snzy521
  • 2010-07-01 11:56:00
  • 4597
收藏助手
不良信息举报
您举报文章:取得TextBox、RichTextBox光标所在的行和列(支持中文)
举报原因:
原因补充:

(最多只允许输入30个字)