Delphi:如何在不调用onchange事件的情况下在TEdit / TMaskEdit中设置文本 [英] Delphi: How to set text in TEdit/TMaskEdit without invoking the onchange event
问题描述
我有一个很大的设置表单,我想用一个班级的数据来填充。所以我在做很多
I've got a pretty big setup form which I'd like to populate with data from a class. so I'm doing a lot of
Edt1.text := ASettings.FirstThing;
我想避免
Edt1.onchange := nil;
Edt1.text := ASettings.FirstThing;
Edt1.onchange := edt1Onchange;
如何更改文本框中的文本并回避onchange事件。
How do I change the text in a text box and sidestep the onchange event.
推荐答案
我使用了类似更改OnChange处理程序的方法,但更常见的是,我使用了标志。
I have used something like changing the OnChange handler, but more often, I use a flag.
updatingFromCode := true;
Edt1.Text := ASettings.FirstThing;
updatingFromCode := false;
然后
procedure TForm1.OnChange(...);
begin
if updatingFromCode then
Exit;
...
此外,我不会存储OnChange实际的OnChange过程,而是存储Edit控件的当前值,然后将其重置(如果未设置它,或者如果另一个地方对其进行了更改,则它将起作用)。
Also, rather than hardcoding the OnChange the the actual OnChange procedure, I would store the Edit control's current value, then reset it (which will work if it is not set, or if another place has changed it, etc.)
oldOnChange := Edt1.OnChange;
Edt1.OnChange := nil;
Edt1.Text := ASettings.FirstThing;
Edt1.OnChange := oldOnChange;
这篇关于Delphi:如何在不调用onchange事件的情况下在TEdit / TMaskEdit中设置文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!