ICE23
ICE23 は、各ダイアログ ボックスのコントロール タブ オーダーを検証します。
ICE23 は、Dialog テーブルの および Control テーブルで次を検証します。
- Dialog テーブル内のすべてのレコードが、ダイアログ列で指定されたダイアログ ボックスに存在するControl_First列のコントロールを指定します。
- Control テーブル内のすべてのレコードが、コントロール列に表示されているコントロールと同じダイアログにあるControl_Next列のコントロールを指定するか、または null 値を含むControl_Next。
- コントロールテーブル内のコントロールからコントロールへのControl_Nextエントリの後に、最初のコントロールに戻る単一の閉じたループが作成されます。 すべてのコントロールがループ内にある必要はありませんが、ループは、Control_Next列にエントリがあるすべてのコントロールを通過する必要があります。
結果
ICE23 は、コントロールのタブ オーダーがダイアログ ボックスで単一の閉じたループを形成しない場合にエラー メッセージを投稿します。
例
ICE23 は、次の例のエラー メッセージを投稿します。
- Dialog1 にはControl_Firstがありません。
- ダイアログ ダイアログ 2 のControl_Firstは、存在しない controlX を参照します。
- Dialog3 には、ControlB で行き止まりのタブ オーダーがあります。
- ControlC で Dialog4 のタブ オーダーが正しくありません
- ControlC で Dialog5 のタブ オーダーが正しくありません。
- コントロール Dialog6.ControlC のControl_Nextは、不明なコントロールにリンクします。
ダイアログ テーブルの (一部)
] ダイアログ | Control_First |
---|---|
Dialog1 | |
Dialog2 | ControlX |
Dialog3 | ControlA |
Dialog4 | ControlA |
Dialog5 | ControlA |
コントロール テーブルの (部分)
] ダイアログ | コントロール | 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 に存在するコントロールに変更します。
ダイアログ テーブルのすべての行に、ダイアログ ボックスに存在する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 列にリストされているコントロールと同じダイアログ内にある有効なコントロールを参照しません。 Dialog6 の ControlC のControl_Next列を ControlD を参照するように変更します。
関連トピック