在C#中获取文本框中光标所在位置

Posted Snowdust

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C#中获取文本框中光标所在位置相关的知识,希望对你有一定的参考价值。

首先定义API函数

const   int  EM_GETSEL  =   0xB0 ;
const   int  EM_LINEFROMCHAR  =   0xC9 ;
const   int  EM_LINEINDEX  =   0xBB ;
[DllImport(
" user32.dll " , EntryPoint  =   " SendMessage " )]
public   static   extern   int  SendMessage(
    
int  hwnd,
    
int  wMsg,
    
int  wParam,
    
ref   int  lParam
);

 获取位置的函数

private  Point GetCursorPos( int  TextHwnd)
{
    
int  i  =   0 , j  =   0 , k  =   0 ;
    
int  lParam  =   0 , wParam  =   0 ;
    i 
=  SendMessage(TextHwnd, EM_GETSEL, wParam,  ref  lParam);
    j 
=  i  /   65536 ;
    
int  lineNo  =  SendMessage(TextHwnd, EM_LINEFROMCHAR, j,  ref  lParam)  +   1 ;
    k 
=  SendMessage(TextHwnd, EM_LINEINDEX,  - 1 ref  lParam);
    
int  colNo  =  j  -  k  +   1 ;
    Point ret 
=   new  Point(lineNo, colNo);
    
return  ret;
}

完整代码如下:

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Runtime.InteropServices;
using  System.Text;
using  System.Windows.Forms;

namespace  CSWin
{
    
public   partial   class  Form1 : Form
    {
        
const   int  EM_GETSEL  =   0xB0 ;
        
const   int  EM_LINEFROMCHAR  =   0xC9 ;
        
const   int  EM_LINEINDEX  =   0xBB ;
        [DllImport(
" user32.dll " , EntryPoint  =   " SendMessage " )]
        
public   static   extern   int  SendMessage(
            
int  hwnd,
            
int  wMsg,
            
int  wParam,
            
ref   int  lParam
        );
        
private  Point GetCursorPos( int  TextHwnd)
        {
            
int  i  =   0 , j  =   0 , k  =   0 ;
            
int  lParam  =   0 , wParam  =   0 ;
            i 
=  SendMessage(TextHwnd, EM_GETSEL, wParam,  ref  lParam);
            j 
=  i  /   65536 ;
            
int  lineNo  =  SendMessage(TextHwnd, EM_LINEFROMCHAR, j,  ref  lParam)  +   1 ;
            k 
=  SendMessage(TextHwnd, EM_LINEINDEX,  - 1 ref  lParam);
            
int  colNo  =  j  -  k  +   1 ;
            Point ret 
=   new  Point(lineNo, colNo);
            
return  ret;
        }
        
public  Form1()
        {
            InitializeComponent();
        }

        
private   void  button1_Click( object  sender, EventArgs e)
        {
            Point p 
=  GetCaretPos( this .textBox1.Handle.ToInt32());
            
this .label1.Text  =   string .Format( " Line:{0}, Col:{1} " , p.X, p.Y);
        }
    }
}

以上是关于在C#中获取文本框中光标所在位置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 的富文本框中将文本添加到用户光标的位置?

qt中如何判断光标在哪个文本框中啊

js 如何获取文本框中光标索引位置

获取textarea文本框所选字符光标位置索引,以及选中的文本值;textarea高度自适应,随着内容增加高度增加;获取输入框中的光标位置

2015.9.2 文本框中获取当前位置的所在行和列

防止“向上箭头”键在文本框中重置光标位置