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

时间:2016-01-22 03:45:41

标签: c# winforms textbox getcaretpos

我需要根据鼠标位置设置文本框的选择开始,我试图在双击上加载文本框,一旦加载文本框,我需要根据鼠标位置设置选择开始。 (即)如果文本框包含某些值,如" abcdef",如果鼠标光标在" c"附近。当加载文本框时,选择开始应该在" c"。

之后

我也试过这个

textBox.GetCharIndexFromPosition(e.Location);

但我没有做对,

提前致谢。

此致

Venkatesan R

1 个答案:

答案 0 :(得分:1)

将@ 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的相对位置。