Delphi:如何在不调用onchange事件的情况下在TEdit / TMaskEdit中设置文本 [英] Delphi: How to set text in TEdit/TMaskEdit without invoking the onchange event

查看:279
本文介绍了Delphi:如何在不调用onchange事件的情况下在TEdit / TMaskEdit中设置文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个很大的设置表单,我想用一个班级的数据来填充。所以我在做很多

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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆