日期:2014-05-20  浏览次数:20950 次

请教高手:一个关于GetCharIndexFromPosition的奇怪问题
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。

这个问题怎么解决?




------解决方案--------------------
abcd,d之后没有东西,点上去是没有作用得。。。。
GetCharIndexFromPosition只能得到最后的字符的位置
------解决方案--------------------
//看来只有用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)));
}