簡単な足算アプリですが、try catch 例外処理を記述しています。
例外が発生した時は、Alertで表示します。
レイアウトは、AbsoluteLayout を使用しています。
AbsoluteLayout を使うと画像の上にボタンやラベルといったコントロールを重ねることができデバイスサイズや縦横に関わらず View の中心に配置したり非常に簡単に書けますのでお勧めです。
例外処理は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();
}
}
}
▫️参考ページ
Xamarin button click handling exception
System.StackOverflowException Class
コメントをお書きください