2012-03-21 6 views
0

私はAx 2012で開発しています。同じタイプの情報を保持し、EDTを共有するフォームにstringEditコントロールがあります。私はクラスでEDTのバリデーションを行います。 フォームのcheckメソッドからクラスを呼び出します。この検証が必要なすべてのstringEditコントロールに対して、同じメソッドをフォームに使用します。フォームのcheckメソッドを各コントロールのvalidateメソッドから起動します。コントロールオブジェクトをメソッドに渡す

私の質問:どのように変更されており、検証が必要なコントロールをcheckメソッドに渡すのですか? フォーム上の私のチェック方法は、次のようになります。

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.私が最初に "this"をコントロールのvalidateからcheckNumberメソッドに渡したとき、 "必要な型と互換性がありません"というエラーが発生しました。しかし、コードを使用したときは、 "ret = super()&& element.checkNumber ....."しか認識しませんでした。これは "this"オブジェクトを同じ型として認識しませんでしたが、現在は同じです。私はチェックメソッドの呼び出しの前にスーパーコールがそれと何か関係があるのだろうか?とにかく、あなたの答えをありがとう。 – Celeste

+0

ドキュメントは明示的には述べていませんが、実際にはsuper()は実際の作業をしばしば行います。ドキュメント:http://msdn.microsoft.com/en-us/library/aa876155(v=ax.10).aspx –

関連する問題