2012-03-21 195 views
0

我正在開發Ax 2012.我有一個表單上的stringEdit控件,它包含相同類型的信息並共享一個EDT。我在課堂上對EDT進行驗證。 我從窗體上的檢查方法調用該類。對於需要此驗證的所有stringEdit控件,我在表單上使用相同的方法。我從每個控件的validate方法的表單中檢查表單的方法。將控制對象傳遞給方法

我的問題:我如何將已被修改(並需要驗證)的控件傳遞給檢查方法? 我檢查的形式方法是這樣的:

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

    if(!valClass.validateNumber(_cntrl.text())) 
    { 
     _cntrl.text("");  
    } 
} 

***這個問題我已經是通過電流控制上述方法

控制器上的validate方法是這樣的:

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

我的問題是傳遞當前控制我修改爲checkNumber方法。如果我不能將「this」傳遞給檢查方法,那麼我應該傳遞什麼?

回答

1

它是精細傳遞this,但你也super()應該叫:

public boolean validate() 
{ 
    return super() && element.checkNumber(this); 
} 

或者:

public boolean validate() 
{ 
    return super() && new MyValidationClass.validateNumber(this.text()); 
} 

考慮使用靜態方法來代替(在控制表):MyTable::validateNumber(this.text())

考慮使用表上的validateField來代替:

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

然後,您不必在窗體中進行更改,您可以使用自動組。

+0

Thansk Jan.當我最初通過控件上的validate將「this」傳遞給checkNumber方法時,我得到「與所需類型不兼容」的錯誤。然而,當我使用你建議的「ret = super()&& element.checkNumber .....」的代碼時,它才認識到相同的類型。它沒有認識到這個「這個」對象是同一類型,但現在它確實如此。我不知道在調用檢查方法之前的超級調用是否與它有關係?無論如何,感謝您的回答。 – Celeste 2012-03-22 06:29:11

+0

該文檔沒有明確說明,但通常super()確實有效。文檔:http://msdn.microsoft.com/en-us/library/aa876155(v=ax.10).aspx – 2012-03-23 06:25:53