今回は、複数のチェックボックスを画面に並べる方法を解説します。
現在、計測設定画面(MeasureSettingPage.razor)には、チェックボックスが1個・ラベルが1個の組み合わせが1つだけ用意されています。基本的にこの<div>は「チェックボックス1個+ラベル1個」で対になっており、これで1つのまとまりです。もう1個チェックボックスを作りたい場合は、同じ書き方でもう1組書けばよいということになります。
図1 既存のチェックボックス(自動更新/_isAuto)のコード
同じ書き方でもう1組コピーする
既存の<div class=”form-check”>〜</div>のブロックをまるごとコピーして、その下に貼り付けます。この時点ではまだ、id・for・データバインド先の変数(_isAuto)・ラベルの文字(自動更新)が1個目と同じままです。データバインドする値は当然変わってくるので、これから書き換えていきます。
図2 <div>ブロックをコピーして2組目を追加した直後(内容はまだ1組目と同じ)
新しいフィールドを追加する
2組目のチェックボックスをデータバインドするための新しいフィールドとして、@codeブロックに private bool _isWarning = false; を追加します。
図3 @codeブロックに新しいフィールド _isWarning を追加
@bindの参照先を変更し、チェンジイベントは付けない
2組目のinput要素の @bind=”_isAuto” を @bind=”_isWarning” に書き換えます。また、1組目には付いていた @bind:after=”AutoChanged” は、今回は不要なので削除しておきます(チェンジイベントは無しにしておきます)。
図4 @bindを_isWarningに変更し、@bind:afterは削除
idを変更する
この id はもちろん変えないといけないので、”warningCheckBox” にしておきます。
図5 idを warningCheckBox に変更
forとラベルの文字を変更する
label要素側の for も、input要素のidと文字列を合わせて warningCheckBox に変更します。ラベルの表示文字も「自動更新」から「異常検知」など、適当な文字に書き換えます。
図6 forをwarningCheckBoxに合わせ、ラベル文字を「異常検知」に変更
ここまでの変更で、2組目のコードは次のようになります。
<div class="form-check">
<input type="checkbox" class="form-check-input"
@bind="_isWarning"
id="warningCheckBox" />
<label class="form-check-label"
for="warningCheckBox">異常検知</label>
</div>
実行して確認する
これで実行すると、チェックボックスが2つ表示され、それぞれが独立してデータバインドされている状態になります。
図7 実行結果:チェックボックスが2つ表示される(自動更新はオフ、異常検知はオン)
ブレークポイントで確認すると、_isAuto は false、_isWarning は true というように、それぞれのチェック状態が対応するフィールドに正しく反映されていることが分かります。片方だけチェックを入れ替えれば、対応するフィールドの値だけが変化します。
図8 @codeブロックのフィールド定義(_isAuto/_isWarningともにbool・既定値false)
横に並べる(form-check-inline)
なので、普通に縦に並べたかったらこれでOKですし、横に並べたいという時もあると思うので、それを指定するのが<div>のクラスです。<div class=”form-check”>の後ろに form-check-inline というクラスがあるので、これを2つの<div>両方に付けておきます。
<div class="form-check form-check-inline">
...(自動更新のチェックボックス)
</div>
<div class="form-check form-check-inline">
...(異常検知のチェックボックス)
</div>
図9 両方の<div>にform-check-inlineクラスを追加
これで見ると、2つのチェックボックスが横並びになっていることが確認できます。
保存ボタンの位置を調整する
ただし、このままだと保存ボタンも同じ行に横並びで表示されてしまいます。これはここに改行(<br/>)を入れてもらってもいいですし、もしくはここでdiv……ボタンはボタンで1つのコンテナに移してあげたら別のグルーピングになるので、それでもこういう感じで見えます。
まずは<br/>を挟む方法です。
</div> <br/> <button class="btn btn-primary" @onclick="Save">保存</button>
図10 チェックボックスの後ろに<br/>を追加
実行すると、チェックボックスは横並びのまま、保存ボタンだけ改行されて下に表示されるようになります。
図11 実行結果:<br/>により保存ボタンが次の行に表示される
もう1つの方法として、保存ボタンを専用の<div>で囲んで別グループにするやり方もあります。最終的には、<br/>の代わりにボタンを<div>で囲む形にしています。
<div>
<button class="btn btn-primary" @onclick="Save">保存</button>
</div>
図12 <br/>の代わりにボタンを<div>で囲んだ最終コード
こんな感じで、チェックボックスを縦に並べたり横に並べたりできますので、いろいろ試してみてください。
図13 最終的な実行結果:チェックボックスは横並び、保存ボタンは独立した行に表示
A01_はじめに
A02_バージョンの確認
A03_プロジェクトの作成
A04_アプリの実行
A05_サンプルプログラムの構成
A06_Razorコンポーネント
A07_Razor構文
A08_@pageでURLを指定する
A09_@rendermode
A10_PageTitle
A11_HTMLの見出し
A12_pタグ
A13_単方向データバインド
A14_単方向データバインドの詳細
A15_Bootstrap
A16_ボタンクリックイベント
A17_イベント引数の受け取り方
A18_ここまでのまとめ
B01_新しいWebページを追加する方法
B02_サイドバーから画面を表示する
B03_サイドバーのアイコンを変更する方法
B04_計測値を表示する
B05_変数に置き換える
B06_最新の値でデータを更新する
B07_@usingで通常のC#コードを呼び出す
B08_画面遷移_aタグ
B09_画面遷移_aタグの見た目をボタンにする
B10_画面遷移_NavigationManagerでの遷移
B11_画面間のパラメータの受け渡し方法
B12_EscapeDataStringでエスケープする
B13_複数のパラメータを渡す
B14_任意のパラメータにする
B15_string以外の型をパラメータで使う方法
B16_DateTime型をパラメータで渡す方法
B17_引数2個のURLも型指定に変更する
B18_パラメータ属性をつけるときの注意点
B19_OnParametersSet
B20_OnInitialized
B21_OnInitializedが2回通る問題の対応
B22_ブラウザが開いている間の値を記憶する方法
B23_値の受け渡しとしてのProtectedSessionStorage
B24_非同期を想定したUIの制御
C01_一覧表示
C02_非同期での一覧表示
C03_table-striped
D01_入力エリア
D02_双方向データバインド
D03_入力データをリアルタイムで通知する方法
D04_placeholder
D05_入力エリアの横幅の調整
D06_テキストチェンジイベントを拾う方法
D07_プルダウン
D08_プルダウンのbootstrap
D09_プルダウンの選択している値をデータバインドで操作する
D10_プルダウンにリストの値を表示する
D11_プルダウンに未選択行を入れる
D12_プルダウンの入力を禁止する
D13_プルダウンのチェンジイベントを取得する
D14_チェックボックス
D15_チェックボックスにラベルを付ける
D16_複数のチェックボックスを並べる
D17_ラジオボタン
D18_ラジオボタンのデータバインド
D19_ラジオボタンのチェンジイベント
D20_ラジオボタンにbootstrapを適応する