ICE23
ICE23 は、各ダイアログ ボックスのコントロール タブ オーダーを検証します。
ICE23 は、Dialog テーブルと Control テーブルで次のことを検証します。
- Dialog テーブル内のすべてのレコードにより、Dialog 列で指定されたダイアログ ボックスに存在する Control_First 列のコントロールが指定される。
- Control テーブル内のすべてのレコードが、Control 列に表示されているコントロールと同じダイアログにある Control_Next 列のコントロールを指定するか、Control_Next に Null 値が含まれている。
- Control テーブル内のコントロールからコントロールへ Control_Next エントリをたどると、最初のコントロールに戻る単一の閉じたループが作成される。 すべてのコントロールがループ内にある必要はないが、ループは、Control_Next 列にエントリを持つすべてのコントロールを通過する必要がある。
結果
コントロールのタブ オーダーがダイアログ ボックスで 1 つの閉じたループを形成しない場合、ICE23 によりエラー メッセージが投稿されます。
例
ICE23 では、ここに示す例に対して次のエラー メッセージが投稿されます。
- Dialog1 には Control_First がありません。
- ダイアログ Dialog2 の Control_First は、存在しない ControlX を参照しています。
- Dialog3 には、コントロール ControlB に行き止まりのタブ オーダーがあります。
- Dialog4 のコントロール ControlC のタブ オーダーの形式が正しくありません
- Dialog5 のコントロール ControlC のタブ オーダーの形式が正しくありません。
- コントロール Dialog6.ControlC の Control_Next が不明なコントロールにリンクしています。
Dialog テーブル (一部)
ダイアログ | Control_First |
---|---|
Dialog1 | |
Dialog2 | ControlX |
Dialog3 | ControlA |
Dialog4 | ControlA |
Dialog5 | ControlA |
Control テーブル (一部)
ダイアログ | コントロール | Control_Next |
---|---|---|
Dialog1 | ControlA | |
Dialog1 | ControlB | ControlA |
Dialog2 | ControlA | ControlB |
Dialog2 | ControlB | ControlA |
Dialog3 | ControlA | ControlB |
Dialog3 | ControlB | |
Dialog4 | ControlA | ControlB |
Dialog4 | ControlB | ControlC |
Dialog4 | ControlC | ControlB |
Dialog5 | ControlA | ControlB |
Dialog5 | ControlB | ControlC |
Dialog5 | ControlC | ControlA |
Dialog5 | ControlD | ControlA |
Dialog6 | ControlA | ControlB |
Dialog6 | ControlB | ControlC |
Dialog6 | ControlC | ControlX |
Dialog6 | ControlD | ControlA |
これらのエラーを修正するには、上記の表の次の点に注意し、示されている変更を加えてください。
Dialog テーブルのすべての行で、Control_First 列にコントロールが指定されているわけではありません。 Dialog テーブルの Dialog1 レコードの Control_First 列を、Dialog1 に存在するコントロールに変更してください。
Dialog テーブルのすべての行に、ダイアログ ボックスに存在する Control_First 列で指定されたコントロールがあるわけではありません。 Dialog2 の Control_First 列を、Dialog2 に存在するコントロールに変更してください。
Control テーブル内の Control_Next エントリをコントロールからコントロールにたどっても、すべてのケースで閉じたループが作成されるわけではありません。 Dialog3 の ControlB の Control_Next 列を ControlA に変更してください。
Control テーブル内の Control_Next エントリをコントロールからコントロールにたどっても、すべてのケースで初期コントロールに戻るわけではありません。 ControlA を参照するには、Dialog4 の ControlC の Control_Next 列を変更してください。
Control テーブル内の Control_Next エントリを、コントロールからコントロールにたどっても、Control_Next 列にエントリがあるダイアログ ボックスのすべてのコントロールを通過するわけではありません。 Dialog5 の ControlC の Control_Next 列を ControlD に変更してください。
Control_Next は、Control 列に一覧表示されているコントロールと同じダイアログ内にある有効なコントロールを参照しません。 ControlD を参照するには、Dialog6 の ControlC の Control_Next 列を変更してください。
関連トピック