当前位置:  开发笔记 > 编程语言 > 正文

如何知道USER何时更改了TMemo/TEdit中的文本?

如何解决《如何知道USER何时更改了TMemo/TEdit中的文本?》经验,为你挑选了1个好方法。

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

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

    在以编程方式更改文本之前放置OnChange:= NIL.然后恢复OnChange.这很容易出错,因为每次更改代码中的文本时都需要记住这一点(以及要应用此特殊处理的备忘录/编辑).现在我们知道每次调用OnChange时,控件都是由用户编辑的.

    捕获OnKeyPress,MouseDown等事件.确定文本是否实际更改并手动调用用户编辑ext时需要调用的代码.这可能会为已经很大的文件添加大量过程.

有一种更优雅的方式吗?



1> kobik..:

您可以编写一个帮助程序来执行选项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参数的类似过程.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有