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