zoukankan      html  css  js  c++  java
  • 如何获得TextBox里光标位置

    这个问题来自论坛。

    第一反应是SelectionStart属性,结果发现在分方向选择内容时返回错误值,真正答案如下:

    using  System;
    using  System.ComponentModel;
    using  System.Windows.Forms;
    using  System.Runtime.InteropServices;
    using  System.Drawing;
    namespace  WindowsApplication5
    {
        
    public   partial   class  Form1 : Form
        
    {
            
    public  Form1()
            
    {
                InitializeComponent();
            }

            [DllImport(
    " user32.dll " )]
            
    private   static   extern   bool  GetCaretPos( out  Point ppt);  

            
    private   void  Form1_Load( object  sender, EventArgs e)
            
    {
                
    this .textBox1.Text  =   " jinjazz " ;
            }

            
    private   void  Form1_MouseDown( object  sender, MouseEventArgs e)
            
    {
               Point p;
               GetCaretPos(
    out  p);
               
    int  i = this .textBox1.GetCharIndexFromPosition(p);
               
    this .Text  =  i.ToString();

            }

        }

    }

     在zswang(偶最pf的伴水)的提醒下,上面方法存在两个遗漏,zswang的补充如下:

    1、当输入焦点没有在编辑框中(比如有多个输入框),这样光标的位置获取并非指定。
      当然可以考虑获取之前先Focus()一下。
    2、GetCharIndexFromPosition()方法有缺陷,当光标在最后一个字符来回的时候数值不变-_-!!!得完善一下。

    public   virtual   int  GetCharIndexFromPosition(Point pt)
    {
        
    int  lParam  =  NativeMethods.Util.MAKELONG(pt.X, pt.Y);
        
    int  n  =  ( int ) UnsafeNativeMethods.SendMessage( new  HandleRef( this base .Handle),  0xd7 0 , lParam);  // EM_CHARFROMPOS = 0xd7
        n  =  NativeMethods.Util.LOWORD(n);
        
    if  (n  <   0 )
        
    {
            
    return   0 ;
        }

        
    string  text  =   this .Text;
        
    if  (n  >=  text.Length)
        
    {
            n 
    =  Math.Max(text.Length  -   1 0 );  // <<<<<<<
        }

        
    return  n;
    }

    感谢zswang!!!

  • 相关阅读:
    HDU题目分类
    nyoj50爱摘苹果的小明
    nyoj24大数阶乘
    hduoj1094A+B for InputOutput Practice (VI)
    nyoj198数数
    NYOJ463九九乘法表
    nyoj436sum of all integer numbers
    hduoj1042N!
    hduoj1095A+B for InputOutput Practice (VII)
    nyoj458小光棍数
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204953.html
Copyright © 2011-2022 走看看