Т.е. по клику выбрать все? - PullRequest
3 голосов
/ 23 декабря 2011

Как выбрать весь текст TEdit1 всякий раз, когда пользователь нажимает на него или щелкает, чтобы выбрать какой-либо текст этого

Ответы [ 3 ]

22 голосов
/ 23 декабря 2011

Может быть довольно опасно делать что-либо, кроме поведения по умолчанию элемента управления TEdit.Ваши пользователи знают, как ведут себя стандартные элементы управления Windows, и любое отклонение от этого может вызвать путаницу.

По умолчанию свойство AutoSelect установлено на True.

Определяет, будет ли автоматически выбираться весь текст в элементе управления для редактирования, когда элемент управления получает фокус.

Установите Автовыбор , чтобы выбрать весь текст, когда элемент управления для редактирования получает фокус. Автовыбор применяется только к однострочным элементам управления.

Используйте Автовыбор , когда пользователь с большей вероятностью заменит текст в элементе редактирования, чем добавит его.

Когда это свойство равно True, все содержимое элемента редактирования редактируется, когда он получает фокус с помощью действия клавиатуры.Если элемент управления фокусируется щелчком мыши, тогда не все содержимое будет выделено.В этом случае вы просто нажимаете CTRL + A , чтобы выбрать все.Двойной щелчок выберет слово под мышью.Это все стандартное поведение, реализуемое базовым элементом управления Windows.


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

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

Что вы можете безопасно сделать, это позвонить по номеру SelectAllOnDblClick.Я полагаю, что у этого не будет никаких раздражающих побочных эффектов.

Другой вариант будет вызывать SelectAll, когда фокус переключается на элемент управления редактированием, но не каждый раз, когда вы нажимаете на элемент управления.Это может показаться немного странным для пользователя, но я лично думаю, что было бы разумно предпринять такой шаг.Если вы хотите сделать это, вам нужно обработать событие OnEnter вашего элемента управления редактированием:

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  PostMessage(Edit1.Handle, EM_SETSEL, 0, -1);
end;
9 голосов
/ 23 декабря 2011

Как выбрать весь текст TEdit1 всякий раз, когда пользователь нажимает на него

Выберите Edit1 в редакторе VCL и дважды щелкните по событию OnClick:

enter image description here

procedure TForm13.Edit1Click(Sender: TObject);
begin
  Edit1.SelectAll;
end;

Вы также можете связать это событие с другим элементом управления, например кнопкой.
Нажмите кнопку, выберите и нажмите стрелку V, чтобы выбрать событие, которое вы хотите связать.

enter image description here

Теперь и Edit1.OnClick, и Button1.OnClick ссылаются на одно и то же событие.

3 голосов
/ 23 декабря 2011

Как выбрать текст TEdit1 всякий раз, когда пользователь нажимает на него:

procedure TForm1.Edit1Click(Sender: TObject);
begin
  Edit1.SelStart:= 1;
  Edit1.SelLength:= 2;
end;
...