Axapta 将控制对象传递给方法

Axapta 将控制对象传递给方法,axapta,ax,dynamics-ax-2012,Axapta,Ax,Dynamics Ax 2012,我正在开发Ax 2012。我有一个表单上的stringEdit控件,它保存相同类型的信息并共享EDT。我在课堂上对EDT进行验证。 我通过表单上的check方法调用该类。对于所有需要此验证的stringEdit控件,我在表单上使用相同的方法。我从每个控件的validate方法开始在表单上使用check方法 我的问题:如何将已修改(需要验证)的控件传递给检查方法? 我在表单上的检查方法如下所示: public void checkNumber(FormStringControl _cntrl) {

我正在开发Ax 2012。我有一个表单上的stringEdit控件,它保存相同类型的信息并共享EDT。我在课堂上对EDT进行验证。 我通过表单上的check方法调用该类。对于所有需要此验证的stringEdit控件,我在表单上使用相同的方法。我从每个控件的validate方法开始在表单上使用check方法

我的问题:如何将已修改(需要验证)的控件传递给检查方法? 我在表单上的检查方法如下所示:

public void checkNumber(FormStringControl _cntrl)
{
        MyValidationClass     valClass = new MyValidationClass(); 
    ;

    if(!valClass.validateNumber(_cntrl.text()))
    {
        _cntrl.text("");     
    }
}
***我遇到的问题是将当前控件传递给上述方法

控件上的验证方法如下所示:

public boolean validate()
{
    boolean ret;
    //ret = super();
    ret = element.checkNumber(this);
    return ret;
}

我遇到的问题是将正在修改的当前控件传递给checkNumber方法。如果我不能将“this”传递给check方法,那么我应该传递什么呢?

传递
this
是可以的,但是您也应该调用
super()

或:

考虑改用静态方法(在控制表上):
MyTable::validateNumber(this.text())

考虑改用桌上的:

public boolean validateField(fieldIdToCheck)
{
    boolean ret = super(fieldIdToCheck);
    switch (fieldIdToCheck)
    {
        case fieldNum(Table,Field):
            ret = MyValidationClass::validateNumber(table.Field) && ret;
            break;
    }
    return ret;
}

然后,您不必对表单进行更改,您可以使用自动分组。

Thansk Jan。当我最初从控件上的validate将“this”传递给checkNumber方法时,出现了一个“与所需类型不兼容”错误。然而,当我使用您建议的代码“ret=super()&&element.checkNumber…”时,它才识别出相同的类型。它没有将“this”对象识别为同一类型,但现在它识别了。我想知道调用check方法之前的超级调用是否与此有关?不管怎样,谢谢你的回答。文档中没有明确说明,但super()通常会起到实际作用。文档:
public boolean validate()
{
    return super() && new MyValidationClass.validateNumber(this.text());
}
public boolean validateField(fieldIdToCheck)
{
    boolean ret = super(fieldIdToCheck);
    switch (fieldIdToCheck)
    {
        case fieldNum(Table,Field):
            ret = MyValidationClass::validateNumber(table.Field) && ret;
            break;
    }
    return ret;
}