35章:WPFクラスを使用する

    作成2013.04.25

     ここでは、Windowsフォームアプリケーション用サンプルコードをWPFアプリケーション用コードに変換します。フォームアプリケーションからWPFアプリケーションへの変化が最近の主流のようです。

  1. 参照元情報
    「クラスを使用する」にジャンプする
    「0 行でズバリ!! [C#] WPF - Windows フォーム用のコントロールを使う」にジャンプする
     作成方法の詳細は上記を参照願います。


  2. フォームアプリケーションからWPFアプリケーションへの変更
     若干の変更でフォームアプリケーションからWPFアプリケーションへの変更ができます。
     完成ファイルは以下からダウンロードできます。
     ダウンロード後は解凍してから使用してください。
      [WPFクラスを使用する]をダウンロードする。
     解凍すると「35WpfPersons」フォルダーがあります。
    注(1)「35WpfPersons」フォルダーの「WpfPersons.sln」ファイルをダブルクリックすると「Express 2012 for Windows Desktop」が起動します。
    注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
    注(3)「ソリューションエクスプローラ」ウインドウ内の「MainWindow.xaml」をダブルクリックすると「デザイン」と「XAML」が表示されます。
    注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
    注(5)「WpfPersons.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。


  3. WpfPersons.slnの実行
    (1)「Express 2012 for Windows Desktop」のデバッグ機能を使用します。
    (2)「デバッグ」_「デバッグ開始」を選択します。
    (3)Test実行ボタンを押すと、クラスを使用した結果のメッセージボックスが表示されます。
    (4)動作を確認するにはデバッグ機能を使用する必要があります。


  4. プロジェクトの構成
    (1)UserControl1.csの構成
    ・UserControlクラスはありません。

    (2)XAMLコードの構成
    ・Button、TextBox、CheckBoxを配置します。



  5. MainWindow.xamlの全コード
    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="243" Width="381">
        <Grid>
            <StackPanel  Name="StackPanel1">
                <Button Content="Test実行" Height="23" Name="Button1" Width="75" HorizontalAlignment="Left" />
                <TextBox Height="24" Name="TextBox1" Width="120" HorizontalAlignment="Left" Text="Microsoft" />
                <TextBox Height="24" Name="TextBox2" Width="120" HorizontalAlignment="Left" Text="Visual" />
                <TextBox Height="24" Name="TextBox3" Width="120" HorizontalAlignment="Left" Text="Basic" />
                <TextBox Height="24" Name="TextBox4" Width="120" HorizontalAlignment="Left" Text="2010" />
                <CheckBox Content="CheckBox" Height="16" Name="CheckBox1" HorizontalAlignment="Left" IsChecked="True" />
            </StackPanel>
        </Grid>
    </Window>
    


  6. MainWindow.xamlコードの解説
    (1)ごく、一般的な記述のみです。


  7. MainWindow.xaml.csの全コード
    using System;
    using System.Windows;
    
    namespace WpfPersons
    {
        public partial class MainWindow : Window
        {
            Persons person1 = new Persons();
            Players player1 = new Players();
            Players player2 = new Players();
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Button1_Click(object sender, RoutedEventArgs e)
            {
                person1.FirstName = TextBox1.Text; //デバッグポイント1
                person1.MiddleName = TextBox2.Text;
                person1.LastName = TextBox3.Text;
                person1.BirthYear = Convert.ToInt32( TextBox4.Text);
                person1.Alive = (bool)CheckBox1.IsChecked;
    
                String test = person1.FullName();//デバッグポイント2
                MessageBox.Show(test);
                MessageBox.Show(Convert.ToString (person1.Age) + " years old");
                if (person1.Alive)
                { MessageBox.Show(person1.FirstName + " is alive"); }
                else
                { MessageBox.Show(person1.FirstName + " is no longer with us"); }
    
                player1.FirstName = "Andrew";
                player1.LastName = "Cencini";
                player1.Number = 43;
                player1.Position = "Shortstop";//デバッグポイント3
    
                player2.FirstName = "Robert";
                player2.LastName = "Lyon";
                player2.Number = 11;
                player2.Position = "Catcher";
    
                test = player1.Position + " " + player1.FullName() + ", #" + Convert.ToString (player1.Number) + " is now at bat.";// デバッグポイント4
                MessageBox.Show(test);
                test = player2.Position + " " + player2.FullName() + ", #" + Convert.ToString(player2.Number) + " is on deck.";
                MessageBox.Show(test);
            }
        }
    


  8. Public Class Personsクラスの全コード
    public class Persons
        {
            private String firstNameValue;
            private String middleNameValue;
            private String lastNameValue;
            public Boolean Alive;
            private int birthYearValue;
    
            public String FullName()
            {
                if (middleNameValue != "")
                { return firstNameValue + " " + middleNameValue + " " + lastNameValue; }
                else
                { return firstNameValue + " " + lastNameValue; };
            }
            private int CalcAge(int year)
            {
                DateTime dtNow = DateTime.Now;
                return dtNow.Year- year;
            }
    
            public String FirstName
            {
                get { return firstNameValue; }
                set { firstNameValue = value; }
            }
            public String MiddleName 
            {
                get { return middleNameValue; }
                set { middleNameValue = value; }
            }
            public String LastName
            {
                get { return lastNameValue; }
                set { lastNameValue = value; }
            }
            public int BirthYear { set { birthYearValue = value; } }
            public int Age {get { return CalcAge(birthYearValue); } }
        }
    


  9. Public Class Playersクラスの全コード
    public class Players : Persons
        {
            private int numberValue;
            private String positionValue;
            public int Number
            {
                get { return numberValue; }
                set { numberValue = value; }
            }
            public String Position
            {
                get { return positionValue; }
                set { positionValue = value; }
            }
        }


  10. コードの解説
    (1)Class MainWindowクラスのコードと同じページ内にPersonsクラスとPlayersクラスを記載します。
    (2)こうすると、ややこしい参照設定を行うことなく、独自に作成したクラスを使用できます。

    感想:
    (1)クラスライブラリーを使用して作成したクラスをビルドするとDLLファイルが作成されます。
    (2)大規模なアプリではDLLファイルは大変有効ですが、参照設定が不可欠となります。
    (3)小規模なアプリでは、Class MainWindowクラスのコードと同じページ内にクラスを記載したほうが簡単です。
    (4)VBとC#のコードは完全互換とはならないようです。
    (5)効率的なプログラミングのためにはクラスの仕組みの十分な理解が不可欠です。







36章:WPF での図形と基本描画の概要(1)に行く。

トップページに戻る。