啓用/禁用從SysWizard類調用的嚮導窗體上的完成按鈕最簡單的方法是使用FormControlId從FormRun對象中檢索FormControl對象,然後根據您的測試條件設置Enabled屬性,例如作爲另一個FormControl是否包含一個值。有很多方法可以實現這一點。我會舉兩個例子。
在第一個示例中,所有修改均在嚮導窗體上完成。 使用FormControl可以像AutoDeclaration屬性設置爲Yes的任何FormControl一樣調用。 在第二個示例中,我將覆蓋我的Wizard類中的finishEnabled()方法,因此它的行爲方式與預期相同。
在每個示例中,使用將控件的標籤文本(「Finish」)作爲參數的FormControlId來找到formControl。我在代碼編輯器中通過在「完成」上執行「查找標籤/文本」來找到正確的標籤ID,然後使用標籤的描述中的「嚮導中的標籤完成按鈕」選擇SYS標籤。
實施例1:嚮導窗體上FormControl對象:
在窗體classDeclaration添加以下內容:
class FormRun extends ObjectRun
{
//FormControl objects used to get SysWizard Finish Button
FormControlId finishButtonId;
FormControl finishButton;
}
初始化在頂層表格的init()的新FormControl方法:
void init()
{
super();
if (element.Args().caller())
{
sysWizard = element.Args().caller();
}
finishButtonId = sysWizard.formRun().controlId("@SYS302811");
finishButton = sysWizard.formRun().control(finishButtonId);
finishButton.enabled(false);
}
現在,您可以像使用任何其他窗體控件一樣使用控件。在這種情況下,我使用的命名IsFinished在我WizardForm作爲測試條件複選框控件的狀態,並從IsFinished.clicked更新FormControl狀態()方法:
public void clicked()
{
super();
//set FormControl state based on the current value of the checkbox
finishButton.enabled(this.checked());
}
* 實施例2: *覆蓋Wizard類中的finishEnabled()方法:
請注意,您需要設置方法參數的默認值,否則AX將拋出編譯錯誤,因爲它與基類中的簽名不匹配。出於某種原因,AX不能正確創建方法簽名。擺脫默認調用超與下面的代碼替換:
public boolean finishEnabled(boolean _enabled = false,
int _idx = this.curTab(),
boolean _setfocus = false)
{
return this.formRun().control(this.formRun().controlId("@SYS302811")).enabled(_enabled);
}
初始化表單的Init控制值()方法:
void init()
{
super();
if (element.Args().caller())
{
sysWizard = element.Args().caller();
}
sysWizard.finishEnabled();
}
調用類的方法,當你的控件更新:
public void clicked()
{
super();
//set FormControl state based on the current value of the checkbox
sysWizard.finishEnabled(this.checked());
}
感謝您的答覆。其實我需要禁用完成按鈕特別是...我很清楚驗證並禁用下一步。 Bt特別是如何禁用FINISH按鈕? –
底部,解釋了這一點。您可以根據用戶輸入禁用finsh按鈕。如果完成按鈕是下一個按鈕,然後SysWizard.nextEnabled將引用finsihed按鈕 –
@ michael ...我明白,但在FINISH頁面,不工作的情況下.. –