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

在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);
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值