2016年

5月

31日

Xamarin.Froms  足算アプリ 例外処理 (try catch)

簡単な足算アプリですが、try catch 例外処理を記述しています。

例外が発生した時は、Alertで表示します。

 

レイアウトは、AbsoluteLayout を使用しています。

AbsoluteLayout を使うと画像の上にボタンやラベルといったコントロールを重ねることができデバイスサイズや縦横に関わらず View の中心に配置したり非常に簡単に書けますのでお勧めです。

Android Windows Phone エミレーター表示

例外処理はAlertにて表示しています。



ファイル --> 新規作成  --> プロジェクト(P)...  --> Cross-Platform --> Xamarin-Forms で作成

TryCatch01

HomePage.cs 追加

HomePage.cs の書き換え

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

using Xamarin.Forms;

namespace TryCatch01
{
    public partial class HomePage : ContentPage
    {
        int Total { get; set; }

        public HomePage()
        {
            InitializeComponent();

            // バックグランドカラー
            BackgroundColor = Color.White;

            // iOSだけ、上部に余白をとる
            Padding = new Thickness(0, Device.OnPlatform(20, 0, 0), 0, 0);

            AbsoluteLayout absoluteLayout = new AbsoluteLayout
            {
                VerticalOptions = LayoutOptions.FillAndExpand
            };         

            // カウンター表示Labelを生成する
            Label label = new Label
            {
                Text = "0",
                //BackgroundColor = Color.Blue,
                FontSize = 40,
                TextColor = Color.Blue,
            };

            var Entry1 = new Entry
            {
                BackgroundColor = Color.Silver,
                Keyboard = Keyboard.Numeric,
                Placeholder = "数字入力",
            };

            // カウンターButton を生成する
            var button1 = new Button
            {
                Text = "足算",
                FontSize = 20,
                BackgroundColor = Color.Blue,
                TextColor = Color.White,
                BorderWidth = 1,
                BorderRadius = 10,
                //Image = new FileImageSource() { File = "xxxxx.png" },
            };


            // 足算Buttonのイベント
            button1.Clicked += (s, e) => {
                // 例外処理
                try
                {
                    // 文字列をintに変換
                    var input = int.Parse(Entry1.Text);
                    // Totalへ入力した値を足し込む                   
                    Total += input;
                    // Totalの現在の値をラベルに表示する
                    label.Text = Total.ToString();
                    // 空白
                    Entry1.Text = "";
                }

                // 入力した文字列がintの範囲を超えた場合ブロックへ制御が移る
                catch (OverflowException)
                {
                    // 例外のメッセージをアラートに表示する
                    DisplayAlert("Alert", "入力可能な範囲は-2147483648から2147483647までです。", "OK");       
                }
                // 入力した文字列がintの形式でなければブロックへ制御が移る
                catch (FormatException)
                {
                    // 例外のメッセージをアラートに表示する
                    DisplayAlert("Alert", "入力文字列の形式が正しくありません。数字を入力してください", "OK");
                }
                // 何も入力しない空白の場合は、ブロックへ制御が移る
                catch (Exception)
                {
                    // 例外のメッセージをアラートに表示する
                    DisplayAlert("Alert", "空白です。数字を入力してください", "OK");
                }

                // 入力フォーカスを設定する
                Entry1.Focus();

            };

            // ラベル、Entry、ボタンを配置
            absoluteLayout.Children.Add(label); // 足し算数値表示Label
            absoluteLayout.Children.Add(Entry1); // 数字入力Entry1
            absoluteLayout.Children.Add(button1); // 足算Button1

            // 足算数値表示Label
            AbsoluteLayout.SetLayoutFlags(label, AbsoluteLayoutFlags.PositionProportional);
            // X Y Width Height
            AbsoluteLayout.SetLayoutBounds(label, new Rectangle

                                     (0.5, 0.25, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize));

            // 数字入力Entry1
            AbsoluteLayout.SetLayoutFlags(Entry1, AbsoluteLayoutFlags.PositionProportional);
            // X Y Width Height
            AbsoluteLayout.SetLayoutBounds(Entry1, new Rectangle(0.5, 0.4, 250, 40));

            // 足算Button
            AbsoluteLayout.SetLayoutFlags(button1, AbsoluteLayoutFlags.PositionProportional);
            // X Y Width Height
            AbsoluteLayout.SetLayoutBounds(button1, new Rectangle(0.5, 0.5, 250, 40));          

            // absoluteLayoutを配置
            Content = absoluteLayout;       
        }
    }
}

App.cs の書き換え

App.cs

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

using Xamarin.Forms;

namespace Counter01
{
    public class App : Application
    {
        public App()
        {
            // The root page of your application
            MainPage = new HomePage();
        }
       
    }
}

 

目 次