チェック ボックス コントロールおよびオプション ボタン コントロールの条件付き書式の選択肢は非常に限られています。実際に、InfoPath UI で、これらの 2 つのコントロールに対して用意されている条件付き書式の選択肢は、「無効にする」の 1 つだけです。しかし、コントロールを無効にすることが常に正しい選択であるとは限りません。条件によっては、コントロールを非表示にする方が望ましい場合があります。これから説明するテクニックは、どちらのコントロールにも適用できますが、ここではチェック ボックスを使用して説明します。
このタスクでは、車両解体業者が販売用に所有している車両の部品をリストするために使用する簡単なフォームを作成します。最初に車両の繰り返しテーブルを作成し、このテーブルに、種類のドロップダウン リスト (自動車、オートバイ、または自転車)、車両の部品を示す 5 つのチェック ボックス セット (タイヤ、エンジン、シート、ハンドル、ハンドルバー) を含めます。種類によっては必要のない部品もあるので、選択した種類に応じて特定のチェック ボックスを非表示にします。
チェック ボックスのレイアウトは、縦型と横型の 2 種類が可能です。それぞれのレイアウトは、異なるアプローチで表示/非表示条件を使用してチェック ボックスを非表示にします。縦型のレイアウトでは、チェック ボックスをセクションに入れます。横型のレイアウトでは、手動で XSL を変更します。まず、新しい空白のフォームを作成しておきます。
スキーマの作成
- [データ ソース] 作業ウィンドウを開きます。
- [マイフィールド] をダブルクリックし、名前を「Vehicles」に変更します。
- 「Vehicle」という名前の繰り返しグループを追加します。
- [Vehicle] グループをクリックし、5 つのはい/いいえ (Boolean) 型の属性フィールドを追加します。名前はそれぞれ「tires」、「engine」、「seat」、「steeringWheel」、および「handlebars」とし、既定値は [いいえ] とします。
- テキスト フィールドを 3 つ追加します。名前はそれぞれ「Id」、「Type」、「Description」とします。
アプローチ 1 – 縦型のレイアウト: セクションに入れる
縦型のレイアウトで、表示/非表示条件を使用してチェック ボックスを非表示にする最も簡単な方法は、そのチェック ボックスをセクションに配置し、そのセクションに表示/非表示条件を追加する方法です。このアプローチは、タスクをすべてデザイン モード内で実行できるという利点があります。
セクションは、ブロック要素として表示されます。したがって、同じ行に他のコントロールを配置することはできません。配置しようとしても、強制的にセクションの上か下に表示されます。このアプローチが、横型ではなく縦型のレイアウトに適しているのはこのためです。このアプローチを、レイアウト用の表を使用して横型のレイアウトに適用することもできますが、非表示になったチェック ボックスの空きスペースが折りたたまれないという大きな欠点があります。
レイアウトの設計
- [データ ソース] 作業ウィンドウで、[Vehicle] を右クリックし、[繰り返しセクション] をクリックします。
- 繰り返しセクションから余計な空白行を削除し、「VEHICLE:」と入力します。
- レイアウト用の 1 列 x 2 行の表を挿入します。
- 1行目のセルを右クリックし、[セルの分割] をクリックします。
- [セルの分割] ダイアログ ボックスで、列数に「2」と入力し、[OK] をクリックします。
チェック ボックス以外のコントロールを挿入する
- [データ ソース] 作業ウィンドウから、[Id] をドラッグして、表の左上のセルにドロップします。
- [Type] を右ドラッグして、右上のセルにドロップし、[ドロップダウン リスト ボックス] をクリックします。
- [Description] をドラッグして、下のセルにドロップします。
各チェック ボックスのセクションを挿入する
- レイアウト用の表の下で、最初の空白行をクリックして、カーソルを置きます。
- 5 つのはい/いいえ (Boolean) 属性フィールド ([tires]、[engine]、[seat]、[steeringWheel]、および [handlebars]) をそれぞれ右クリックし、[その他 | セクション] をクリックして、[OK] をクリックします。
セクションのプロパティを調整する
- 挿入した 5 つのセクションを、Ctrl キーを押しながらクリックしてこれらをすべて選択し、Alt + Enter キーを押します。
- [プロパティ (複数選択)] ダイアログ ボックスで、スペースおよび余白のそれぞれの値を設定します。ただし、右の余白は「0px」にします。次に、[OK] をクリックします。
- 複数選択のままで、いずれかのセクションを右クリックし、[罫線と網掛けの設定] をクリックします。
- [罫線と網掛けの設定] ダイアログ ボックスの [罫線] タブで、[なし] をクリックして既存の罫線を削除し、[OK] をクリックします。
チェック ボックス コントロールを挿入する
- 5 つのはい/いいえ (Boolean) 属性フィールド ([tires]、[engine]、[seat]、[steeringWheel]、および [handlebars]) をそれぞれドラッグして、関連付けられているセクションにドロップします。
- 5 つの各セクション内の余計な空白行を削除します。完成したレイアウトは、図 1 のようになります。

図 1 表示/非表示条件を設定するチェック ボックスの縦型レイアウトの完成版
[Type] ドロップダウン リスト ボックスに項目を追加する
- [Type] ボックスをダブルクリックし、[追加] をクリックします。
- [選択肢の追加] ダイアログ ボックスで、「Car」と入力し、[OK] をクリックします。
- さらに「Motorcycle」および「Bicycle」の 2 つの項目を追加します。
チェック ボックスが非表示になるように engine 属性の値を false に設定する動作規則を追加する
- [動作規則] をクリックし、[追加] をクリックします。
- 動作規則の名前を「Set engine = false」とし、[条件の設定] をクリックします。
- [条件] ダイアログ ボックスの 3 つ目のボックスの一覧から [文字列の入力] をクリックし、「Bicycle」と入力してから、[OK] をクリックします。
- [動作の追加] をクリックします。
- [動作] ダイアログ ボックスの [動作] ボックスの一覧の [フィールドの値を設定する] をクリックします。
- [フィールド] ボックスの右にある [XPath の選択] ボタンをクリックし、[Vehicles/Vehicle/engine] をクリックしてから、[OK] をクリックします。
- [値] ボックスの右にある [数式の挿入] ボタンをクリックし、[関数の挿入] をクリックします。[関数] ボックスの一覧の [false] をクリックしてから、[OK] を 4 回クリックします。
チェック ボックスが非表示になるように steeringWheel 属性の値を false に設定する動作規則を追加する
- [追加] をクリックします。
- 動作規則の名前を「Set steeringWheel = false」とし、[条件の設定] をクリックします。
- [条件] ダイアログ ボックスの 3 つ目のボックスの一覧から [文字列の入力] をクリックし、「Motorcycle」と入力します。[AND/OR] をクリックし、[AND] の代わりに [OR] をクリックします。
- 3 つ目のボックスの一覧の [文字列の入力] をクリックし、「Bicycle」と入力して (図 2 を参照)、[OK] をクリックします。

図 2 steeringWheel 属性を false に設定するための動作規則の条件
- [動作の追加] をクリックします。
- [動作] ダイアログ ボックスの [動作] ボックスの一覧の [フィールドの値を設定する] をクリックします。
- [フィールド] ボックスの右にある [XPath の選択] ボタンをクリックし、[Vehicles/Vehicle/steeringWheel] をクリックしてから、[OK] をクリックします。
- [値] ボックスの右にある [数式の挿入] ボタンをクリックし、[関数の挿入] をクリックします。[関数] ボックスの一覧の [false] をクリックしてから、[OK] を 4 回クリックします。
チェック ボックスが非表示になるように handlebars属性の値を false に設定する動作規則を追加する
- [追加] をクリックします。
- 動作規則の名前を「Set handlebars = false」とし、[条件の設定] をクリックします。
- [条件] ダイアログ ボックスの 3 つ目のボックスの一覧の [文字列の入力] をクリックし、「Car」と入力し、[OK] をクリックします。
- [動作の追加] をクリックします。
- [動作] ダイアログ ボックスの [動作] ボックスの一覧の [フィールドの値を設定する] をクリックします。
- [フィールド] ボックスの右にある [XPath の選択] ボタンをクリックし、[Vehicles/Vehicle/handlebars] をクリックしてから、[OK] をクリックします。
- [値] ボックスの右にある [数式の挿入] ボタンをクリックし、[関数の挿入] をクリックします。[関数] ボックスの一覧の [false] をクリックし、[OK] を 6 回クリックして、開いているダイアログ ボックスをすべて閉じます。
[Engine] セクションに表示/非表示条件を追加する
- [Engine] セクションをダブルクリックします。
- [セクションのプロパティ] ダイアログ ボックスの [表示] タブで、[条件付き書式] をクリックし、[追加] をクリックします。
- 1 つ目のボックスの一覧の [Type] をクリックし、2 つ目のボックスの一覧の [が次の値に等しい] をクリックします。3 つ目のボックスの一覧の [文字列の入力] をクリックし、「Bicycle」と入力します。
- [このコントロールを表示しない] チェック ボックスをオンにし、[OK] を 3 回クリックします。
[Steering Wheel] セクションに表示/非表示条件を追加する
- [Steering Wheel] セクションをダブルクリックします。
- [セクションのプロパティ] ダイアログ ボックスの [表示] タブで、[条件付き書式] をクリックし、[追加] をクリックします。
- 1 つ目のボックスの一覧の [Type] をクリックし、2 つ目のボックスの一覧の [が次の値に等しい] をクリックします。3 つ目のボックスの一覧の [文字列の入力] をクリックし、「Motorcycle」と入力します。[AND/OR] をクリックし、[AND] の代わりに [OR] をクリックします。
- 1 つ目のボックスの一覧の [Type] をクリックし、2 つ目のボックスの一覧の [が次の値に等しい] をクリックします。3 つ目のボックスの一覧の [文字列の入力] をクリックし、「Bicycle」と入力します。
- [このコントロールを表示しない] チェック ボックスをオンにし (図 3 を参照)、[OK] を 3 回クリックします。

図 3 [Steering Wheel]セクションの表示/非表示条件
[Handlebars] セクションに表示/非表示条件を追加する
- [Handlebars] セクションをダブルクリックします。
- [セクションのプロパティ] ダイアログ ボックスの [表示] タブで、[条件付き書式] をクリックし、[追加] をクリックします。
- 1 つ目のボックスの一覧の [Type] をクリックし、2 つ目のボックスの一覧の [が次の値に等しい] をクリックします。3 つ目のボックスの一覧の [文字列の入力] をクリックし、「Car」と入力します。
- [このコントロールを表示しない] チェック ボックスをオンにし、[OK] を 3 回クリックします。
確認
- フォームをプレビューします。
- [Type] ボックスの一覧の各項目をクリックして、チェック ボックスとラベルが不要なものを表示しないかを確認します。
これで、車両の種類に基づいて不要なものを表示しない縦型の動的なチェック ボックスのリストができました。フォームを保存するときに無効なセクションが残らないように、非表示のチェック ボックスは自動的にオフになります。
アプローチ 2 – 横型のレイアウト: XSL を手動で変更する
横型のレイアウトの場合、表示/非表示条件を使用してチェック ボックスを非表示にするための最も簡単な方法は、ラベルに表示/非表示条件を設定した式ボックスを使用し、手動で XSL を変更してチェック ボックス コントロールに表示/非表示条件を追加する方法です。このアプローチは、縦型のレイアウトでも使用できますが、デザイン モード外での作業を伴うので、縦型の場合は 1 つ目のアプローチを使用することをお勧めします。
レイアウトの設計
- [データ ソース] 作業ウィンドウで [Vehicle] を右クリックし、[繰り返しセクション] をクリックします。
- 繰り返しセクションから余計な空白行を削除し、「VEHICLE:」と入力します。
- レイアウト用の 1 列 2 行の表を挿入します。
- 1行目のテーブル セルを右クリックし、[セルの分割] をクリックします。
- [セルの分割] ダイアログ ボックスで、列数に「2」と入力し、[OK] をクリックします。
コントロールを挿入する
- [データ ソース] 作業ウィンドウから、[Id] をドラッグして、表の左上のセルにドロップします。
- [Type] を右ドラッグして、右上のセルにドロップし、[ドロップダウン リスト ボックス] をクリックします。
- [Description]をドラッグして、下のセルにドロップします。
- 5 つのはい/いいえ (Boolean) 属性フィールド ([tires]、[engine]、[seat]、[steeringWheel]、および [handlebars]) をそれぞれドラッグして、下のセルにドロップします。
[Type] ドロップダウン リスト ボックスに項目を追加する
- [Type] ボックスをダブルクリックし、[追加] をクリックします。
- [選択肢の追加] ダイアログ ボックスで、「Car」と入力し、[OK] をクリックします。
- さらに、「Motorcycle」および「Bicycle」の 2 つの項目を追加します。
チェック ボックスが非表示になるように engine 属性の値を false に設定する動作規則を追加する
- [動作規則] をクリックし、[追加] をクリックします。
- 動作規則の名前を「Set engine = false」とし、[条件の設定] をクリックします。
- [条件] ダイアログ ボックスの 3 つ目のボックスの一覧から [文字列の入力] をクリックし、「Bicycle」と入力してから、[OK] をクリックします。
- [動作の追加] をクリックします。
- [動作] ダイアログ ボックスの [動作] ボックスの一覧の [フィールドの値を設定する] をクリックします。
- [フィールド] ボックスの右にある [XPath の選択] ボタンをクリックし、[Vehicles/Vehicle/engine] をクリックしてから、[OK] をクリックします。
- [値] ボックスの右にある [数式の挿入] ボタンをクリックし、[関数の挿入] をクリックします。[関数] ボックスの一覧の [false] をクリックしてから、[OK] を 4 回クリックします。
チェック ボックスが非表示になるように steeringWheel 属性の値を false に設定する動作規則を追加する
- [追加] をクリックします。
- 動作規則の名前を「Set steeringWheel = false」とし、[条件の設定] をクリックします。
- [条件] ダイアログ ボックスの 3 つ目のボックスの一覧の [文字列の入力] をクリックし、「Motorcycle」と入力します。[AND/OR] をクリックし、[AND] の代わりに [OR] をクリックします。
- 3 つ目のボックスの一覧の [文字列の入力] をクリックし、「Bicycle」と入力して、[OK] をクリックします。
- [動作の追加] をクリックします。
- [動作] ダイアログ ボックスで、 [動作] ボックスの一覧の [フィールドの値を設定する] をクリックします。
- [フィールド] ボックスの右にある [XPath の選択] ボタンをクリックし、[Vehicles/Vehicle/steeringWheel] をクリックしてから、[OK] をクリックします。
- [値] ボックスの右にある [数式の挿入] ボタンをクリックし、[関数の挿入] をクリックします。[関数] ボックスの一覧の [false] をクリックしてから、[OK] を 4 回クリックします。
チェック ボックスが非表示になるように handlebars 属性の値を false に設定する動作規則を追加する
- [追加] をクリックします。
- 動作規則の名前を「Set handlebars = false」とし、[条件の設定] をクリックします。
- [条件] ダイアログ ボックスの 3 つ目のボックスの一覧の [文字列の入力] をクリックし、「Car」と入力し、[OK] をクリックします。
- [動作の追加] をクリックします。
- [動作] ダイアログ ボックスの [動作] ボックスの一覧の [フィールドの値を設定する] をクリックします。
- [フィールド] ボックスの右にある [XPath の選択] ボタンをクリックし、[Vehicles/Vehicle/handlebars] をクリックしてから、[OK] をクリックします。
- [値] ボックスの右にある [数式の挿入] ボタンをクリックし、[関数の挿入] をクリックします。[関数] ボックスの一覧の [false] をクリックし、[OK] を 6 回クリックして、開いているダイアログ ボックスをすべて閉じます。完成した動作規則セットを図 4 に示します。

図4 [Type] ボックスの動作規則のセット
チェック ボックスのレイアウトを修正する
- 各チェック ボックスとラベルの間の空白文字を削除します。
- すべてのチェック ボックスが同じ行に配置されるように、改行をすべて削除します。
- 「Engine」、「Seat」、「Steering Wheel」、および「Handlebars」のラベルのチェック ボックスを Ctrl キーを押しながらクリックしてこれらをすべて選択し、Alt + Enter キーを押します。
- [プロパティ (複数選択)] ダイアログ ボックスで、左の余白の値を「10px」にし、[OK] をクリックします。
チェック ボックス間のスペースをあける場合に重要なのは、空白文字ではなく余白を使用することです。空白文字を使用した場合、チェック ボックスが非表示になったときにそれが残ってしまうので、想定しているよりも広い間隔があいてしまいます。余白はチェック ボックス コントロールの一部なので、チェック ボックスとともに非表示になります。
[Engine] チェック ボックスのラベルを表示/非表示条件を設定した式ボックスと置き換える
- [Engine] チェック ボックスのラベル テキストを選択します。
- [コントロール] 作業ウィンドウを開き、式ボックスをクリックして、選択したラベル テキストの場所に挿入します。
- [式ボックスの挿入] ダイアログ ボックスで、「"Engine"」と入力し、[OK] をクリックします。
- 新しい式ボックスをダブルクリックします。
- [式ボックスのプロパティ] ダイアログ ボックスの [サイズ] タブで、幅に「自動」と入力し、スペースと余白のそれぞれの値を設定します。ただし、右の余白は「0」にします。
- [表示] タブで、[条件付き書式] をクリックし、[追加] をクリックします。
- 1 つ目のボックスの一覧の [Type] をクリックし、2 つ目のボックスの一覧の [が次の値に等しい] をクリックします。3 つ目のボックスの一覧の [文字列の入力] をクリックし、「Bicycle」と入力します。
- [このコントロールを表示しない] チェック ボックスをオンにし、[OK] を 3 回クリックします。
[Steering Wheel] チェック ボックスのラベルを表示/非表示条件設定した式ボックスと置き換える
- [Steering Wheel] チェック ボックスのラベル テキストを選択します。
- [コントロール] 作業ウィンドウで式ボックスをクリックして、選択したラベル テキストの場所に挿入します。
- [式ボックスの挿入] ダイアログ ボックスで、「"Steering Wheel"」と入力し、[OK] をクリックします。
- 新しい式ボックスをダブルクリックします。
- [式ボックスのプロパティ] ダイアログ ボックスの [サイズ] タブで、幅に「自動」 と入力し、スペースと余白のそれぞれの値を設定します。ただし、右の余白は「0」にします。
- [表示] タブで、[条件付き書式] をクリックし、[追加] をクリックします。
- 1 つ目のボックスの一覧の [Type] をクリックし、2 つ目のボックスの一覧の [が次の値に等しい] をクリックします。3 つ目のボックスの一覧の [文字列の入力] をクリックし、「Motorcycle」と入力します。[AND/OR] をクリックし、[AND] の代わりに [OR] をクリックします。
- 1 つ目のボックスの一覧の [Type] をクリックし、2 つ目のボックスの一覧の [が次の値に等しい] をクリックします。3 つ目のボックスの一覧の [文字列の入力] をクリックし、「Bicycle」と入力します。
- [このコントロールを表示しない] チェック ボックスをオンにし、[OK] を 3 回クリックします。
[Handlebars] チェック ボックスのラベルを表示/非表示条件を設定した式ボックスと置き換える
- [Handlebars] チェック ボックスのラベル テキストを選択します。
- [コントロール] 作業ウィンドウで式ボックスをクリックして、選択したラベル テキストの場所に挿入します。
- [式ボックスの挿入] ダイアログ ボックスで、「"Handlebars"」と入力し、[OK] をクリックします。
- 新しい式ボックスをダブルクリックします。
- [式ボックスのプロパティ] ダイアログ ボックスの [サイズ] タブで、幅に「自動」 と入力し、スペースと余白のそれぞれの値を設定します。ただし、右の余白は「0」にします。
- [表示] タブで、[条件付き書式] をクリックし、[追加] をクリックします。
- 1 つ目のボックスの一覧の [Type] をクリックし、2 つ目のボックスの一覧の [が次の値に等しい] をクリックします。3 つ目のボックスの一覧の [文字列の入力] をクリックし、「Car」と入力します。
- [このコントロールを表示しない] チェック ボックスをオンにし、[OK] を 3 回クリックします。完成したレイアウトは、図 5 のようになります。

図 5 表示/非表示条件が設定されたチェック ボックスの横型のレイアウトの完成版
ビューの .xsl ファイルを変更する
- [ファイル] メニューの [フォーム構成ファイルの取り出し] をクリックします。
- 取り出したフォーム構成ファイルの保存先を選択し、[OK] をクリックします。
- InfoPath を終了して、フォーム構成ファイルに対するロックを解除します。
- テキスト エディタを使用して、view1.xsl ファイルを開きます。
[Engine] チェック ボックスを条件によって非表示にするコードを追加する
- テキスト「my:engine」を検索して、非表示にするチェック ボックス コントロールを表す input 要素を探します。
- input 要素の直後に、次のコードを追加します。
<xsl:attribute name="style">MARGIN-LEFT: 10px;<xsl:choose> <xsl:when test="my:Type = "Bicycle"">DISPLAY: none</xsl:when> </xsl:choose> </xsl:attribute> |
重要なのは、input 要素の style 属性の値をコピーして xsl:attribute 要素と xsl:choose 要素の間に貼り付けることです。また、xsl:choose 要素の直前にはセミコロンを必ず追加してください。上のコードでは MARGIN-LEFT: 10px; を使用していますが、ここは style 属性で指定されている値と同じにする必要があります。
- input要素の style 属性を削除します。
ここで注目してほしいのは、このコードをすべてタイプしなくても、単にこのチェック ボックスの式ボックス ラベルから (既に非表示になるように設定されているので) コードをコピーして、それを目的のチェック ボックス コードに貼り付けることも可能ということです。この後、input要素の style属性の内容を移動して、xsl:attribute 要素の内容を置き換えます。最後に、input要素の style 属性を削除します。
[Steering Wheel] チェック ボックスを条件によって非表示にするコードを追加する
- テキスト「my:steeringWheel」を検索して、非表示にするチェック ボックス コントロールを表す input 要素を探します。
- input 要素の直後に、次のコードを追加します。
<xsl:attribute name="style">MARGIN-LEFT: 10px;<xsl:choose> <xsl:when test="my:Type = "Motorcycle" or my:Type = "Bicycle"">DISPLAY: none</xsl:when> </xsl:choose> </xsl:attribute> |
- input 要素の style 属性を削除します。
[Handlebars] チェック ボックスを条件によって非表示にするコードを追加する
- テキスト「my:handlebars」を検索して、非表示にするチェック ボックス コントロールを表す input 要素を探します。
- input 要素の直後に、次のコードを追加します。
<xsl:attribute name="style">MARGIN-LEFT: 10px;<xsl:choose> <xsl:when test="my:Type = "Car"">DISPLAY: none</xsl:when> </xsl:choose> </xsl:attribute> |
- input要素の style 属性を削除します。
確認
- ビューの .xsl ファイルを保存し、テキスト エディタを閉じます。
- manifest.xsf ファイルを右クリックし、[デザイン] をクリックして、フォーム テンプレートを再度開きます。
- フォームをプレビューします。
- [Type] ボックスの一覧の各項目をクリックして、適切なチェック ボックスとラベルのみが表示されることを確認します。
以上の変更により、車両の種類に基づいて不要なものを表示しない横型の動的なチェック ボックスのリストができました。非表示のチェック ボックスは自動的にオフになります。 手動の修正は、デザイン モードでラウンドトリップされ、後で [チェック ボックスのプロパティ] ダイアログ ボックスで変更が行われてもそのまま維持されます。このアプローチは、少々の追加作業を伴いますが、最終的にその労力に十分見合った結果が得られます。
©2005 Greg Collins. All rights reserved. Licensed to Autonomy Systems, LLC for display on InfoPathDev.com.
英文記事: Hide a Check Box Using Conditional Visibilityからの翻訳