WinForm开发中,我使用了一个控件RichTextBox,我在此控件的OnMouseDown事件中这样来获得鼠标焦点:
int intCharIndex = this.GetCharIndexFromPosition(new Point(e.X, e.Y));
假如RichTextBox里面的内容是 abcd
1.如果我把鼠标点击在a之前,则函数得到的intCharIndex 是0。
2.如果我把鼠标点击在a与b之间,则函数得到的intCharIndex 是1。
3.如果我把鼠标点击在b与c之间,则函数得到的intCharIndex 是2。
4.如果我把鼠标点击在c与d之间,则函数得到的intCharIndex 是3。
问题:
如果我把鼠标点击在d之后,则函数得到的intCharIndex 仍旧是3。
我的本意是,如果把鼠标点击在d之后,要得到4。这个问题怎么解决?

解决方案 »

  1.   

    abcd,d之后没有东西,点上去是没有作用得。
    GetCharIndexFromPosition只能得到最后的字符的位置
      

  2.   

    如果abcd后面在加一个空格,点上去就会有4出来
      

  3.   

    //看来只有用API了[DllImport("User32.DLL")]
    public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, 
        ref Point lParam);
    public const uint EM_CHARFROMPOS = 215;private void richTextBox1_MouseMove(object sender, MouseEventArgs e)
    {
        int X = Math.Min(Math.Max(e.X, 0), ((RichTextBox)sender).ClientSize.Width);
        int Y = Math.Min(Math.Max(e.Y, 0), ((RichTextBox)sender).ClientSize.Height);
        Point vPoint = new Point(X, Y);
        int intCharIndex = 0x0000FFFF & 
            SendMessage(((RichTextBox)sender).Handle, EM_CHARFROMPOS, 0,
                ref vPoint);    Text = string.Format("{0},{1}", intCharIndex,
            ((RichTextBox)sender).GetCharIndexFromPosition(new Point(e.X, e.Y)));
    }