[ストアアプリ][入門] Step16. Borderコントロールを使用する ~RadioButtonをグループ化する~

今回はBorderコントロールを使用して、RadioButtonコントロールをグループ化する方法について見ていきます。


RadiButtonコントロールのグループ化

MainPage.xaml上に配置したすべてのRadioButtonコントロールは、MainPageの上で1つのグループとしてまとめられています。

複数のグループを作りたい場合は、何かしらのコンテナコントロールが必要となります。

このような場合には Gridコントロールや StackPanelコントロールの上に RadioButtonコントロールを配置するのが一般的です。

また、グループが分けられていることを示すために、枠線が必要となることがあります。

そこで、Borederコントロール、パネルコントロール、RadioButtonコントロールを組み合わせてグループ化を行います。

以下は、BorederコントロールのコンテントとしてStackPanelコントロールを配置し、さらにその中にRadioButtononトロールを配置してグループ化をする例です(コントロールの入れ子構造をわかりやすくするためにいくつかのプロパティを省略して掲載しています)。

<Border>
    <StackPanel>
        <RadioButton Content="C#" IsChecked="True"/>
        <RadioButton Content="VB"/>
    </StackPanel>
</Border>

ラジオボタンをグループ化する例

上記のようにすることで、複数のグループを配置することが可能になります。

<Border BorderBrush="White" CornerRadius="5" BorderThickness="1" HorizontalAlignment="Left" Height="71" Margin="36,34,0,0" VerticalAlignment="Top" Width="103">
    <StackPanel>
        <RadioButton Content="C#" IsChecked="True"/>
        <RadioButton Content="VB"/>
    </StackPanel>
</Border>
<Border BorderBrush="White" CornerRadius="5" BorderThickness="1" HorizontalAlignment="Left" Height="71" Margin="176,34,0,0" VerticalAlignment="Top" Width="103">
    <StackPanel>
        <RadioButton Content="男性"/>
        <RadioButton Content="女性" IsChecked="True"/>
    </StackPanel>
</Border>

複数グループの配置

 

[ストアアプリ][入門] Step2. 開発環境を入手しよう

Windows 8向けのストアアプリを開発するには、Visual Studioが必要です。

Visual Studio は無償版から有償版までありますが、個人で開発を楽しむ分には無償の Express版で十分です。

学生さんの場合は Visual Studio の Professional版を無料で使用することが可能です。

ストアアプリ開発用の無償版は Express 2013 for Windows Desktopという製品です。

ストアアプリを開発するには WIndow 8.1が必要です。 Windows 7では開発ができないので注意してください。

それでは、以下のURLから Express 2013 for Windows Desktop を入手しましょう。

http://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs#DownloadFamilies_2

インストール方法には2種類あります。

1つは「今すぐインストール」をクリックする方法。

もう1つは、ISOイメージファイルをダウンロードし、DVDにしてからインストールする方法があります。

どちらでインストールを行っても構いません。

Express版のダウンロード

 

ここでは、「今すぐインストール」でのインストール方法について説明します。

まず、「今すぐインストール」をクリックすると、下記のページに移動します。

左側の「Express 2013 for Windows」をクリックします。

以下が表示されたら、[実行]ボタンをクリックします。

[実行]ボタンをクリック

「ライセンス条項およびプライバシーポリシーに同意します」にチェックを付けて「インストール」をクリックします。

インストールを開始

 

インストールがはじまります。

インストールが完了するのを待ちます

インストールが完了すると、以下のように表示されます。

インストール完了

 

起動をすると、以下のダイアログが表示されるので、[同意します]ボタンをクリックします。

[同意します]をクリック

Microsoft アカウントを使用してサインインをします。持っていない場合は、新規でアカウントを作成してサインインをします。

サインインをしてライセンスを取得

 

ライセンスが更新される

以上でインストールが完了し、Express 2013 for Windows Desktop が起動します。

Express 2013 for Windows Desktop

次回から、アプリストア開発に触れていきます。

[リフレクション] すべてのメンバを取得する

すべてのメンバを取得するにはTypeクラスの GetMembersメソッドを使用します。

ここでの「すべてのメンバ」とは、メソッド、プロパティ、フィールドなどを指します。

例えば、以下のようなTestClassというクラスがあるとします。

VBの例

Public Class TestClass
    ' フィールド
    Private _testProperty As String

    ''' <summary>
    ''' コンストラクタ
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()

    End Sub

    ''' <summary>
    ''' プロパティ
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property TestProperty() As String
        Get
            Return _testProperty
        End Get
        Set(ByVal value As String)
            _testProperty = value
        End Set
    End Property

    ''' <summary>
    ''' メソッド
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function TestMethod() As Boolean
        Return True
    End Function
End Class

C#の例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace ReflectionCS
{
    class TestClass
    {
        // フィールド
        private string _testField = string.Empty;

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public TestClass()
        {

        }

        /// <summary>
        /// プロパティ
        /// </summary>
        public string TestProperty
        {
            get
            {
                return _testField;
            }
            set
            {
                _testField = value;
            }
        }

        /// <summary>
        /// メソッド
        /// </summary>
        /// <returns></returns>
        public bool TestMethod()
        {
            return true;
        }
    }
}

上記クラスのメンバ情報を取得するには、以下のようなコードを書きます。

VBの例

Sub Main()

    Dim t As Type = GetType(ReflectionVB.TestClass)

    'メンバを取得する
    Dim members As MemberInfo() = t.GetMembers( _
        BindingFlags.Public Or BindingFlags.NonPublic Or _
        BindingFlags.Instance Or BindingFlags.Static Or _
        BindingFlags.DeclaredOnly)

    For Each m As MemberInfo In members
        Console.WriteLine("{0}", m.Name)
    Next


    Console.ReadLine()
End Sub

C#の例

static void Main(string[] args)
{
    ////TestClass tc = new TestClass();
    ////tc.DispInfo();
    //var asm = Assembly.GetExecutingAssembly();

    //// アセンブリのバージョンを取得
    //var version = asm.GetName().Version;

    //Console.WriteLine(version);

    Type type = typeof(ReflectionCS.TestClass);

    //メンバを取得する
    MemberInfo[] members = type.GetMembers(
        BindingFlags.Public | BindingFlags.NonPublic |
        BindingFlags.Instance | BindingFlags.Static |
        BindingFlags.DeclaredOnly);

    foreach (MemberInfo mb in members)
    {
        Console.WriteLine("{0}", mb.Name);
    }

    Console.ReadLine();
}

GetMembersのメソッドに指定可能な BindingFlagsは以下の通りです。
この BindingFlagsにより、取得したいメンバを決定することができます。

メンバ 説明
Public パブリックメンバ
NonPublic 非パブリックメンバ
Instance インスタンスメンバ
Static 静的メンバ
DeclaredOnly 継承メンバーを除外

実行例は以下の通りです。

実行例

実行例の

get_TestProperty、set_TestPropertyはプロパティ内にあるゲッターとセッターを表しています。

TestMethodは、クラス内にあるメソッド名です。

.ctorというのは、コンストラクタです。

TestPropertyは、クラス内にあるプロパティ名です。

_testPropertyは、クラス内にあるフィールドです。

このように、GetMembersメソッドを使用することで、すべてのメンバーを取得することができます。

最後に、メンバーのタイプも表示するようにコードを修正してみましょう。

For Each(C#はforeach)を以下のように書き換えてください。

m.MemberTypeがメンバーのタイプを表します。

VBの例

For Each m As MemberInfo In members
    Console.WriteLine("{0}:{1}", m.MemberType, m.Name)
Next

C#の例

foreach (MemberInfo mb in members)
{
    Console.WriteLine("{0}:{1}", mb.MemberType, mb.Name);
}

実行例は以下の通りです。

実行例