3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

眺めて覚える C# Xamarin Button(3)

Last updated at Posted at 2020-04-12

#たくさんボタンを配置する。
#Visual Studio 2019でプロジェクトを作成する。

image.png
Xamarin Formsを選択する。
Windows APPを作成するような感覚で開発できる。
image.png
空白のプロジェクトを作成する。
image.png
MainPage.xamlは、そのまま使います。

MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="ManyButtons.MainPage">

    <StackLayout>
        <!-- Place new controls here -->
        <Label Text="Welcome to Xamarin.Forms!" 
           HorizontalOptions="Center"
           VerticalOptions="CenterAndExpand" />
    </StackLayout>

</ContentPage>

プログラムによりボタンを生成し、Gridに配置した。

MainPage.xaml.cs
using Android.Widget;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace ManyButtons
{
    // Learn more about making custom code visible in the Xamarin.Forms previewer
    // by visiting https://aka.ms/xamarinforms-previewer
    [DesignTimeVisible(false)]
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
            Setup();
        }
        // Button に Tag プロパティを追加
        class Mbutton : Xamarin.Forms.Button
        {
            public object Tag
            {
                get { return (object)GetValue(TagProperty); }
                set { SetValue(TagProperty, value); }
            }

            public static readonly BindableProperty TagProperty =
                BindableProperty.Create(nameof(Tag), typeof(object), typeof(Mbutton), null);
        }
        // 16個のボタンを作成してグリットに配置
        void Setup()
        {
            var g = new Grid() {HeightRequest=400 };
            var k = 0;
            for(var i = 0; i < 4; i++)
            {
                for (var j = 0; j < 4; j++)
                {
                    var b = new Mbutton() { Text = $"{k}",Tag=k};
                    b.Clicked += B_Clicked;
                    g.Children.Add(b, j, i);
                    k++;
                }
            }
            //余白部の作成
            var l=new Label();
            g.Children.Add(l, 0, 8);
            Content = g;
        }

        private void B_Clicked(object s, EventArgs e)
        {
            var sx = s as Mbutton;
            Toast.MakeText(Android.App.Application.Context,
                $"{sx.Tag}がタッチされた",ToastLength.Short).Show();
        }
    }
}

###注意 xamarin forms buttonには、TagプロパティがないのでButtonを継承してobject Typeの何でもセットできるTagを用意した。

####Toastは、アンドロイド用に用意されたメッセージボックスで表示後一定時間で消される。

実行すると下記のようになる。

image.png

#MessageBox(DisplayAlert)版

MainPage.xaml.cs
using Android.Widget;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace ManyButtons
{
    // Learn more about making custom code visible in the Xamarin.Forms previewer
    // by visiting https://aka.ms/xamarinforms-previewer
    [DesignTimeVisible(false)]
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
            Setup();
        }
        // Button に Tag プロパティを追加
        class Mbutton : Xamarin.Forms.Button
        {
            public object Tag
            {
                get { return (object)GetValue(TagProperty); }
                set { SetValue(TagProperty, value); }
            }

            public static readonly BindableProperty TagProperty =
                BindableProperty.Create(nameof(Tag), typeof(object), typeof(Mbutton), null);
        }
        // 16個のボタンを作成してグリットに配置
        void Setup()
        {
            var g = new Grid() {HeightRequest=400 };
            var k = 0;
            for(var i = 0; i < 4; i++)
            {
                for (var j = 0; j < 4; j++)
                {
                    var b = new Mbutton() { Text = $"{k}",Tag=k};
                    b.Clicked += B_Clicked;
                    g.Children.Add(b, j, i);
                    k++;
                }
            }
            //余白部の作成
            var l=new Label();
            g.Children.Add(l, 0, 8);
            Content = g;
        }

        private void B_Clicked(object s, EventArgs e)
        {
            var sx = s as Mbutton;
            DisplayAlert("Alert", $"ボタン{sx.Tag}がタッチされた", "OK");
        }
    }
}

image.png

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?