每当用户单击 TEdit1 或单击以选择其中的某些文本时,如何选择 TEdit1 的所有文本
4 回答
除了控件的默认行为之外,做任何事情都是非常危险的TEdit
。您的用户知道标准 Windows 控件的行为方式,任何与此的偏差都可能导致混淆。
默认情况下,该AutoSelect
属性设置为True
。
确定当控件获得焦点时是否自动选择编辑控件中的所有文本。
设置AutoSelect以在编辑控件获得焦点时选择所有文本。AutoSelect仅适用于单行编辑控件。
当用户更可能替换编辑控件中的文本而不是附加到它时,请使用AutoSelect 。
当该属性为True
时,当通过键盘动作获得焦点时,编辑控件的全部内容被选中。如果控件通过鼠标单击获得焦点,则内容不会全部被选中。在这种情况下,您只需按下CTRL+A即可全选。双击将选择鼠标下方的单词。这是底层 Windows 控件实现的所有标准行为。
如果您根据当前选择的答案更改响应OnClick
事件的选择,那么您会发现无法通过鼠标单击来移动插入符号。这是非常违反直觉的行为。
这是一个经典示例,说明为什么您需要非常小心地更改控件的默认行为。在测试时很容易不会错过特定的用例,但是当您的用户掌握该程序时,他们肯定会发现所有这些问题。
您可以安全地SelectAll
从OnDblClick
. 我相信这不会有烦人的副作用。
另一种选择是SelectAll
在焦点切换到编辑控件时调用,但不是每次单击控件时调用。用户可能会觉得这有点奇怪,但我个人认为采取这种做法是合理的。如果你想这样做,你需要处理OnEnter
你的编辑控件的事件:
procedure TForm1.Edit1Enter(Sender: TObject);
begin
PostMessage(Edit1.Handle, EM_SETSEL, 0, -1);
end;
每当用户单击它时如何选择 TEdit1 的所有文本
在 VCL 编辑器中选择 Edit1 并双击OnClick
事件:
procedure TForm13.Edit1Click(Sender: TObject);
begin
Edit1.SelectAll;
end;
您还可以将此事件链接到另一个控件,例如按钮。
选择按钮,选择并单击V
箭头以选择要链接的事件。
现在两者都Edit1.OnClick
链接Button1.OnClick
到同一个事件。
每当用户单击它时如何选择 TEdit1 的某些文本:
procedure TForm1.Edit1Click(Sender: TObject);
begin
Edit1.SelStart:= 1;
Edit1.SelLength:= 2;
end;
您必须使用 OnMouseUp;
procedure cxMRUEdit1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button=mbLeft then cxMRUEdit1.SelectAll;
end;