我有一个相当大的设置表单,我想用类中的数据填充它。所以我做了很多
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/