【问题标题】:TEdit onclick select all?TEdit onclick 全选?
【发布时间】:2012-01-26 20:06:09
【问题描述】:

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

【问题讨论】:

  • 我很困惑。请澄清你的问题。您想知道如何将 TEdit 设置为适当的行为或如何以编程方式进行吗?

标签: delphi onclick delphi-2010 textselection


【解决方案1】:

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

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

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

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

现在Edit1.OnClickButton1.OnClick 都链接到同一个事件。

【讨论】:

  • 这只是一个事件处理程序。它必须连接到某个地方才能触发。
  • 我的意思是连接到 VCL 组件的事件属性。从它的名字来看,大概是 Edit1,但也可能不是这样。
  • @Johan 您是否尝试过使用这样的编辑控件。尝试用鼠标放置插入符号。
  • @DavidHeffernan,我想保持简单,但如果编辑没有焦点,则只做selectall 的额外测试。无论如何,好点,简单的改变使它不那么烦人了。
  • 在 OnClick 中进行测试已经太迟了。您可以做的最好的事情是在OnEnter 的窗口中发布一条全选消息。
【解决方案2】:

当用户点击它时如何选择 TEdit1 的一些文本:

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

【讨论】:

    【解决方案3】:

    除了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;
    

    【讨论】:

    • 很好的解释和意见文章。
    • 我刚想问一个类似的问题,但首先发现了这个。优秀!谢谢,伙计们。
    【解决方案4】:

    您必须使用 OnMouseUp;

    procedure cxMRUEdit1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
     if Button=mbLeft then cxMRUEdit1.SelectAll;
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 2016-05-24
      • 2014-09-28
      • 2016-07-28
      • 2014-07-31
      • 2020-04-29
      相关资源
      最近更新 更多