gpt4 book ai didi

delphi - 如何知道用户何时更改了 TMemo/TEdit 中的文本?

转载 作者:行者123 更新时间:2023-12-03 15:46:09 26 4
gpt4 key购买 nike

我总是被 TMemo(和其他类似控件)只有 OnChange 事件这一事实所困扰。我想知道用户何时更改文本,而不是何时以编程方式更改文本。

我知道两种区分用户更改的文本和以编程方式更改的文本的方法:

  1. 在以编程方式更改文本之前放置 OnChange:= NIL。然后恢复OnChange。这很容易出错,因为您需要记住每次更改代码中的文本时都执行此操作(以及哪些备忘录/编辑需要应用这种特殊处理)。现在我们知道每次调用 OnChange 时,该控件都会被用户编辑。
  2. 捕获 OnKeyPress、MouseDown 等事件。确定文本是否确实被更改,并手动调用用户编辑文本时需要调用的代码。这可能会向已经很大的文件添加大量过程。

有更优雅的方法吗?

最佳答案

您可以编写一个帮助程序来执行选项 1,并在您的框架中使用它,只要您想确保设置文本时不会触发 OnChange 事件。例如:

type
TCustomEditAccess = class(TCustomEdit);

procedure SetEditTextNoEvent(Edit: TCustomEdit; const AText: string);
var
OldOnChange: TNotifyEvent;
begin
with TCustomEditAccess(Edit) do
begin
OldOnChange := OnChange;
try
OnChange := nil;
Text := AText;
finally
OnChange := OldOnChange;
end;
end;
end;

TMemo 还具有 Lines 属性,该属性也会触发 OnChange,因此您可以创建另一个接受 Lines: TStrings 的类似过程 参数。

关于delphi - 如何知道用户何时更改了 TMemo/TEdit 中的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41719647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com