首先,感谢您的回答!共 9 个答案。谢谢你。
坏消息:所有答案都有一些怪癖或不太正确(或根本没有)。我已为您的每个帖子添加了评论。
好消息:我找到了一种让它发挥作用的方法。这个解决方案非常简单,似乎适用于所有场景(鼠标向下、选择文本、选项卡焦点等)
bool alreadyFocused;
...
textBox1.GotFocus += textBox1_GotFocus;
textBox1.MouseUp += textBox1_MouseUp;
textBox1.Leave += textBox1_Leave;
...
void textBox1_Leave(object sender, EventArgs e)
{
alreadyFocused = false;
}
void textBox1_GotFocus(object sender, EventArgs e)
{
// Select all text only if the mouse isn't down.
// This makes tabbing to the textbox give focus.
if (MouseButtons == MouseButtons.None)
{
this.textBox1.SelectAll();
alreadyFocused = true;
}
}
void textBox1_MouseUp(object sender, MouseEventArgs e)
{
// Web browsers like Google Chrome select the text on mouse up.
// They only do it if the textbox isn't already focused,
// and if the user hasn't selected all text.
if (!alreadyFocused && this.textBox1.SelectionLength == 0)
{
alreadyFocused = true;
this.textBox1.SelectAll();
}
}
据我所知,这会导致文本框的行为与 Web 浏览器的地址栏完全相同。
希望这可以帮助下一个试图解决这个看似简单的问题的人。
再次感谢,伙计们,你们所有的回答帮助我走上了正确的道路。