如何根据鼠标位置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
.
计算相对位置
我需要根据鼠标位置设置文本框的选择开始,我尝试通过双击加载文本框,加载文本框后,我需要根据鼠标设置选择开始位置。 (即)如果文本框包含一些值,如 "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
.