如何根据鼠标位置WinForms设置选择开始

How to set Selection start based on Mouse Position WinForms

我需要根据鼠标位置设置文本框的选择开始,我尝试通过双击加载文本框,加载文本框后,我需要根据鼠标设置选择开始位置。 (即)如果文本框包含一些值,如 "abcdef",如果加载文本框时鼠标光标靠近 "c",则选择开始应在 "c".[=11= 之后]

这个我也试过了

textBox.GetCharIndexFromPosition(e.Location);

但我没弄对,

提前致谢。

此致,

文卡特桑

将@Reza 的代码放入正确的事件中就可以正常工作:

private void textBox_MouseDoubleClick(object sender, MouseEventArgs e)
{
    textBox.Text = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";  // load the text data here
    // now position the caret onto the mouse position
    textBox.SelectionStart = textBox.GetCharIndexFromPosition(e.Location);
    // and clear a selection
    textBox.SelectionLength = 0;
}

请注意,您需要使用 MouseDoubleClick,而不是简单的 DoubleClick,否则您会错过 e.Location 参数!

这是获取鼠标相对于TextBox的坐标最简单直接的方法。

如果您的加载方法很复杂,您可以通过传入 MouseEventArgs e 来调用它,但简单地调用它而不是 textBox.Text = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 是最自然的方式。

如果你想也可以使用

textBox.SelectionStart = textBoxtextBox1.PointToClient(Control.MousePosition));

这适用于任何事件或方法。 PointToClient 会根据屏幕位置 Control.MousePosition.

计算相对位置