如何获得TextBox里光标位置
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-05-19
这个问题来自论坛。 第一反应是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!!! |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于如何获得TextBox里光标位置的所有评论