libro
www.tuyano.com
C#ではじめるWindows 8アプリ開発入門

チェックボックスとラジオボタン (4/4)

作成:2014-02-08 09:59
更新:2014-02-08 09:59

■グループ化されたRadioButtonをチェックする

グループのRadioButtonについて調べるような場合、一つの方法として、「グループのRadioButtonを1つのコンテナにまとめておき、そのコンテナ内に組み込まれているものを調べていく」というやり方があります。実際にやってみましょう。

●TextBlockを用意
まず、結果表示用のTextBlockを配置しておきましょう。位置や表示フォントなどは自由に調整してかまいません。名前は「textblock1」としておきます。

●StackPanelを用意
ツールボックスから「StackPanel」という部品を配置します。これがコンテナとなるものです。これは、中に組み入れたコントロールを一列に整列して表示するコンテナです。ここでは「panel1」という名前を設定しておきます。

●RadioButtonを組み込む
続いて、RadioButtonStackPanel内に配置します。外に作成したものは、Altキーを押しながらStackPanel内にドラッグすると中に組み入れることができます。そうやってRadioButtonStackPanel内に組み込んでいきます。いずれもGroupNameには「group1」と設定をしておきましょう。

今回は、「radio1」「radio2」「radio3」という名前の3つのRadioButtonを組み込んでおきました。が、名前や組み込むRadioButtonの数などは自由に変更して構いません。またContentを設定してラジオボタンの表示テキストをいろいろと変更しておきましょう。

●メソッドを用意する
MainPage.Xaml.csMainPageクラス内に、下のリスト欄に掲載したメソッドを追加します。この内のcheckRadioが、StackPanel内に配置したRaioButtonChecked状態を調べ、選択されているものをTextBlockに表示する処理です。

作成後、各RadioButtonのCheckedイベントにRadio_Checkedを割り当てましょう。ラジオボタンを切り替えると自動的にTextBlockの表示が変わるようになります。

ここでは、まずpanel1内に組み込まれているコントロールについて、繰り返しを使って順に取得し、処理を行うようにしています。
 for (int i = 0;i < panel1.Children.Count;i++){
       RadioButton r = (RadioButton) panel1.Children[i];
Childrenは、そのコンテナに組み込まれているコントロール類をまとめて保管するコレクションのプロパティです。Countで要素数を取得し、繰り返しをしています。そして、panel1.Children[i]で、コレクションから順にRadioButtonを取得していきます。
if ((bool)r.IsChecked){ radio = r; }
後は、取り出したRadioButtonChekedがtrueならば、それが選択されているものだと判断するだけです。が、ちょっと注意したいのは、IsCheckedはboolではなく、正確にはbool?なので条件で使う際にはboolにキャストしておく、という点でしょう。

bool?型は、「null許容bool」というもので、nullであることが可能なbool型です。ですので値はtrue, false, nullの3通りあるのです。boolにキャストすれば、nullもfalse扱いされますので、trueの場合にのみ実行できます。

このbool?型は、未定状態を使えるようにしたCheckBoxなどでも同じように使われていますので、ここでしっかりと覚えておくとよいでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

        private void Radio_Checked(object sender, RoutedEventArgs e)
        {
            checkRadio();
        }

        public void checkRadio(){
            RadioButton radio = null;
            for (int i = 0;i < panel1.Children.Count;i++){
                RadioButton r = (RadioButton) panel1.Children[i];
                if ((bool)r.IsChecked){
                    radio = r;
                }
            }
            string msg = radio.Content + " is checked.";
            textblock1.Text = msg;
        }

※関連コンテンツ

「C#ではじめるWindows 8アプリ開発入門」に戻る