4

每当用户单击 TEdit1 或单击以选择其中的某些文本时,如何选择 TEdit1 的所有文本

4

4 回答 4

22

除了控件的默认行为之外,做任何事情都是非常危险的TEdit。您的用户知道标准 Windows 控件的行为方式,任何与此的偏差都可能导致混淆。

默认情况下,该AutoSelect属性设置为True

确定当控件获得焦点时是否自动选择编辑控件中的所有文本。

设置AutoSelect以在编辑控件获得焦点时选择所有文本。AutoSelect仅适用于单行编辑控件。

当用户更可能替换编辑控件中的文本而不是附加到它时,请使用AutoSelect 。

当该属性为True时,当通过键盘动作获得焦点时,编辑控件的全部内容被选中。如果控件通过鼠标单击获得焦点,则内容不会全部被选中。在这种情况下,您只需按下CTRL+A即可全选。双击将选择鼠标下方的单词。这是底层 Windows 控件实现的所有标准行为。


如果您根据当前选择的答案更改响应OnClick事件的选择,那么您会发现无法通过鼠标单击来移动插入符号。这是非常违反直觉的行为。

这是一个经典示例,说明为什么您需要非常小心地更改控件的默认行为。在测试时很容易不会错过特定的用例,但是当您的用户掌握该程序时,他们肯定会发现所有这些问题。

您可以安全地SelectAllOnDblClick. 我相信这不会有烦人的副作用。

另一种选择是SelectAll在焦点切换到编辑控件时调用,但不是每次单击控件时调用。用户可能会觉得这有点奇怪,但我个人认为采取这种做法是合理的。如果你想这样做,你需要处理OnEnter你的编辑控件的事件:

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  PostMessage(Edit1.Handle, EM_SETSEL, 0, -1);
end;
于 2011-12-23T13:50:35.240 回答
12

每当用户单击它时如何选择 TEdit1 的所有文本

在 VCL 编辑器中选择 Edit1 并双击OnClick事件:

在此处输入图像描述

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

您还可以将此事件链接到另一个控件,例如按钮。
选择按钮,选择并单击V箭头以选择要链接的事件。

在此处输入图像描述

现在两者都Edit1.OnClick链接Button1.OnClick到同一个事件。

于 2011-12-23T13:08:43.020 回答
3

每当用户单击它时如何选择 TEdit1 的某些文本:

procedure TForm1.Edit1Click(Sender: TObject);
begin
  Edit1.SelStart:= 1;
  Edit1.SelLength:= 2;
end;
于 2011-12-23T13:22:24.770 回答
1

您必须使用 OnMouseUp;

procedure cxMRUEdit1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button=mbLeft then cxMRUEdit1.SelectAll;
end;
于 2019-09-11T07:21:22.423 回答