質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

2379閲覧

【Xamarin】for文で複数のボタンを定義したい【C#】

otokichi_

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2017/12/26 12:39

下記XMLのようにボタンがいくつかあり、
C#で1つ目のボタンを押した時、コンソールに出力するようにしています。

(Resource.Id.button1)のところを、for文でbutton1、button2、button3...という風に値を増やしていけば、簡潔に記述できるのではと考えていますが、実際そんな事できるのでしょうか?

xml

1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent"> 6 <Button 7 android:id="@+id/button1" 8 android:layout_width="match_parent" 9 android:layout_height="wrap_content" 10 android:text="Play01" /> 11 <Button 12 android:id="@+id/button2" 13 android:layout_width="match_parent" 14 android:layout_height="wrap_content" 15 android:text="Play02" /> 16 <Button 17 android:id="@+id/button3" 18 android:layout_width="match_parent" 19 android:layout_height="wrap_content" 20 android:text="Play03" /> 21</LinearLayout>

C#

1//ボタンをクリックした時のイベント処理 2FindViewById<Button>(Resource.Id.button1).Click += (sender, e) => { 3 4 System.Console.WriteLine("ボタン1です"); 5 6};

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

(Resource.Id.button1)のところを、for文でbutton1、button2、button3...という風に値を増やしていけば、簡潔に記述できるのではと考えていますが、実際そんな事できるのでしょうか?

下のように、先に配列なりリストなりに入れてしまえば、それをループしてイベントハンドラを登録することは可能です。

csharp

1var resourceIds = new int[] 2{ 3 Resource.Id.button1, 4 Resource.Id.button2, 5 Resource.Id.button3 6}; 7 8foreach (var resId in resourceIds) 9{ 10 FindViewById<Button>(resId).Click += (sender, e) => 11 { 12 var button = sender as Button; 13 Console.WriteLine($"{button.Text} が押されました"); 14 }; 15}

Resource.Id.button1 などの Resource ID は数値ですが、 Resource.Id.button1 + 1 == Resource.Id.button2 ではないことに注意してください。Resource ID に割り振られる数値はランダムです。

投稿2017/12/26 13:08

amay077

総合スコア1075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otokichi_

2017/12/27 10:07

ありがとうございます!スッキリしました。 $"{button.Text}のところになんで値がくるのかなーとか、色々な初歩的疑問が残りましたが、まだまだC#を理解できてないんだと思います。精進します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問