【问题标题】:Can I use an Edit Mask to format output? (not just validate input)我可以使用编辑掩码来格式化输出吗? (不仅仅是验证输入)
【发布时间】:2011-04-11 05:43:05
【问题描述】:

德尔福 7 题。我正在使用具有许多数据绑定控件的表单(更改此选项不是一种选择)。我有一个 TDBEDIT 控件绑定到一个 TStringField (它有一个 EditMask 属性)。我知道我可以使用此 EditMask 来强制控件验证其输入,但我想知道是否可以直接使用原始值填充字段并让控件根据 EditMask 显示它?

我想用 16 位数字填充该字段,但我希望它显示为 4 批 4 位数字(即 9999 9999 9999 9999)。

如果我这样做......

dbedtABCNumber.DataSource.DataSet.Edit;
dbedtABCNumber.Field.Value := '1234567812345678';

我只显示前 4 位数字。

我希望有人更熟悉旧数据绑定控件的内部结构。

【问题讨论】:

    标签: delphi


    【解决方案1】:

    您可以使用TField.OnGetText eventTNumericField.DisplayFormat property 来修改文本的显示方式。

    由于你有一个 TStringField 保存数字,你有两个选择:

    • 使用TNumericFieldDisplayFormat 属性
    • 使用OnGetText 事件并进行自己的字符串格式化

    编辑:

    Sam 使用了这种方法:

    我实现了OnSetTextOnGetText 事件处理程序。我已经有了Edit Mask 9999 9999 9999 9999;1;_ 所以OnSetText 只是

    TStringField(Sender).Value := Trim(Text);
    

    OnGetText 只是

    sValue := TStringField(Sender).Value;  
    Text := Format('%s %s %s %s', [Copy(sValue, 1, 4), Copy(sValue, 5, 4), Copy(sValue, 9, 4), Copy(sValue, 13, 4)]);
    

    效果很好。谢谢。

    【讨论】:

    • 谢谢 Jeroen,我会试试的。
    • @Sam:你选了哪一个?
    • 我实现了 OnSetText 和 OnGetText 事件处理程序。我已经有了编辑掩码 9999 9999 9999 9999;1;_ 所以 OnSetText 只是 TStringField(Sender).Value := Trim(Text);而 OnGetText 只是 sValue := TStringField(Sender).Value; Text := Format('%s %s %s %s', [Copy(sValue, 0, 4), Copy(sValue, 4, 4), Copy(sValue, 8, 4), Copy(sValue, 12, 4)]);它工作正常。谢谢。
    • @Jeroen,实际上需要调整字符串索引... Text := Format('%s %s %s %s', [Copy(sValue, 0, 4), Copy( sValue, 5, 4), Copy(sValue, 9, 4), Copy(sValue, 13, 4)]);
    • @Sam:我认为 ... 1、4 以及字符串都是基于 1 的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多