Delphi:如何在 TEdit/TMaskEdit 中设置文本而不调用 onchange 事件

标签 delphi event-handling

我有一个相当大的设置表单,我想用类中的数据填充它。所以我做了很多

Edt1.text := ASettings.FirstThing; 

我想避免

Edt1.onchange := nil;
Edt1.text := ASettings.FirstThing; 
Edt1.onchange := edt1Onchange;

如何更改文本框中的文本并避开 onchange 事件。

最佳答案

我使用过类似更改 OnChange 处理程序的方法,但更常见的是,我使用标志。

updatingFromCode := true;
Edt1.Text := ASettings.FirstThing;
updatingFromCode := false;

然后

procedure TForm1.OnChange(...);
begin
  if updatingFromCode then
    Exit;
  ...


此外,我不会将 OnChange 硬编码为实际的 OnChange 过程,而是存储编辑控件的当前值,然后重置它(如果未设置该值,或者如果另一个地方已更改它等,则该值将起作用)

oldOnChange := Edt1.OnChange;
Edt1.OnChange := nil;
Edt1.Text := ASettings.FirstThing; 
Edt1.OnChange := oldOnChange;

关于Delphi:如何在 TEdit/TMaskEdit 中设置文本而不调用 onchange 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2014541/

相关文章:

c++ - 在 C++ 和 Delphi DLL 之间传递 PChar/*char

delphi - 可以使用 FinalBuilder 每天构建一个 fortran 项目(F77、F90 及更高版本)吗?

delphi - 使用 "drag area"移动无标题窗口

delphi - 从 Delphi 写入 CD

javascript - 如何在 Cesium 上停止预定的 ontick 事件

javascript - 如何在ckeditor中(有条件地)事件处理(取消)和警报消息(按键事件)?

android - 使用 Delphi 访问 Android 日历

c - XCB获取所有windows X.Org的事件

Javascript 模式 : Conditional event handler

javascript - 如何为可调整大小的 jQuery UI 元素启动调整大小功能(触发句柄拖动)