Прежде всего, спасибо за ответы! 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();
}
}
Насколько я могу судить, это приводит к тому, что текстовое поле ведет себя точно так же, как адресная строка веб-браузера.
Надеюсь, это поможет следующему парню, который пытается решить эту обманчиво простую проблему.
Еще раз спасибо, ребята, за все ваши ответы, которые помогли привести меня к правильному пути.