Заставить WinForms TextBox вести себя как адресная строка вашего браузера - PullRequest
149 голосов
/ 19 сентября 2008

Когда текстовое поле C # WinForms получает фокус, я хочу, чтобы оно велось как адресная строка вашего браузера.

Чтобы увидеть, что я имею в виду, нажмите в адресной строке вашего браузера. Вы заметите следующее поведение:

  1. При щелчке по текстовому полю следует выделить весь текст, если текстовое поле не было предварительно сфокусировано.
  2. Мышь вниз и перетаскивание в текстовое поле должны выделить только текст, который я выделил мышью.
  3. Если текстовое поле уже выделено, нажатие не выделяет весь текст.
  4. Фокусировка текстового поля программно или с помощью клавиш клавиатуры должна выделять весь текст.

Я хочу сделать именно это в WinForms.

Предупреждение о быстром огнестрельном оружии: пожалуйста, прочитайте следующее, прежде чем ответить! Спасибо, ребята. : -)

Вызов .SelectAll () во время события .Enter или .GotFocus не будут работа , потому что если пользователь нажал текстовое поле, каретка будет размещена где он нажал, отменив все текст.

Вызов .SelectAll () во время события .Click не будет работать , потому что пользователь не сможет выделить текст мышью; вызов .SelectAll () будет перезаписывать выделенный пользователем текст.

Вызов BeginInvoke ((Action) textbox.SelectAll) при вводе события focus / enter не работает , поскольку он нарушает правило № 2, описанное выше, он будет переопределять выбор пользователя в фокусе.

Ответы [ 31 ]

0 голосов
/ 23 мая 2011

Для группы текстовых полей в форме:

private System.Windows.Forms.TextBox lastFocus;   

private void textBox_GotFocus(object sender, System.Windows.Forms.MouseEventArgs e)   
{
    TextBox senderTextBox = sender as TextBox;
    if (lastFocus!=senderTextBox){
        senderTextBox.SelectAll();
    }
    lastFocus = senderTextBox;   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...