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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

button

HTMLで用いる<button>タグです。

Xamarin

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

Q&A

解決済

2回答

363閲覧

C#で画面作成において、コントロールの命名方法

yah

総合スコア30

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

button

HTMLで用いる<button>タグです。

Xamarin

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

1グッド

0クリップ

投稿2017/08/30 10:24

編集2017/09/10 18:21

###前提・実現したいこと
VisualStudio For Mac COMMUNITY を使って、C#でリバーシを作成しようとしています。
画面作成をする為、二重ループで8×8の盤面をGrid、BoxView、Buttonを使い作成しました。
どのボタンが押されたかの判断をする為、ボタンにそれぞれ名前をつけたいと考えていますが、その方法がわかりません。
初歩的な質問になるかとは思いますが、ご教授いただけますと幸いです。

###該当のソースコード

var grid = new Grid() { BackgroundColor = Color.Black, Margin = 20, RowDefinitions = { new RowDefinition() {Height = new GridLength(1, GridUnitType.Star)}, new RowDefinition() {Height = new GridLength(1, GridUnitType.Star)}, new RowDefinition() {Height = new GridLength(1, GridUnitType.Star)}, new RowDefinition() {Height = new GridLength(1, GridUnitType.Star)}, new RowDefinition() {Height = new GridLength(1, GridUnitType.Star)}, new RowDefinition() {Height = new GridLength(1, GridUnitType.Star)}, new RowDefinition() {Height = new GridLength(1, GridUnitType.Star)}, new RowDefinition() {Height = new GridLength(1, GridUnitType.Star)}, }, ColumnDefinitions = { new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star)}, new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star)}, new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star)}, new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star)}, new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star)}, new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star)}, new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star)}, new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star)}, }, }; for (int i = 0; i < 8; i++) { for (int n = 0; n < 8; n++) { string stone = "●"; var color = Color.Green; if ((i == 3 && n == 3) || (i == 4 && n == 4)) { color = Color.Black; } else if ((i == 4 && n == 3) || (i == 3 && n == 4)) { color = Color.White; } var boxView = new BoxView { BackgroundColor = Color.Green, }; var btn = new Button { Text = stone, TextColor = color, HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center, }; var boxLabel = new ContentView { Content = new Grid { Children = { boxView, btn, } } }; grid.Children.Add(boxLabel, i, n); } }

###補足情報(言語/FW/ツール等のバージョンなど)
開発環境:VisualStudio For Mac COMMUNITY
開発言語:C#
Xamarin.Formsをフレームワークとして使用しております。

###(2017.9.11)解決方法補足
同じことを悩んでいらっしゃる方がいましたら、参考になるかと思い、私自身がとった方法を記述させていただきます。
調べ直したところ、ソース直書きではNameは変更できないとのことでした。
なので、Buttonクラスを継承するカスタムコントロール(ButtonStones.cs)を作成いたしました。
私の場合は、位置情報(00〜63)を知りたかった為以下のようにいたしました。

C#

1 public class ButtonStones : Button 2 { 3 public Stones() 4 { 5 } 6 7 // [0]:x位置/[1]:y位置 8 public string[] Positions { get; set; } 9 } 10

綺麗なソースとして、いいのか悪いのかはわからないですが上記のPositionsの代わりにNameを設定することでコントロールに動的に名前がつけられるかと思います。

kei344👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

初期化子の中では動的に名付けるのはできなかったと思います
ですので以下のようになるかと思います

for (int i = 0; i < 8; i++) { for (int n = 0; n < 8; n++) { var buttons = new button[8][8]; buttons[i][n] = new Button(); buttons[i][n].name = "Button" +"_" + i.toString() + "_" + n.toString(); } }

ちなみに動作確認はしていないので、構文エラー等を適度に修正してください。

投稿2017/08/31 10:56

piglet

総合スコア47

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

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

yah

2017/08/31 13:06

解答ありがとうございます。 上記でやってみましたが、やはりNameプロパティは見つかりませんでした。 しかしpigletさんのソースを拝見させていただき、配列でButtonを作成し、そこにCommandで結びつけることでそれぞれのボタン押下時の処理を追加できるかと考えましたので、一度そのように考えなおしてみたいと思います。 ありがとうございました!
guest

0

C#

1var btn = new Button 2 { 3 Text = stone, 4 TextColor = color, 5 HorizontalOptions = LayoutOptions.Center, 6 VerticalOptions = LayoutOptions.Center, 7 Name = "button_" + i + "_" + n, 8 }; 9

とかではいかがでしょう。

投稿2017/08/30 12:50

編集2017/08/30 12:50
cancat

総合スコア313

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

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

yah

2017/08/31 09:31 編集

解答ありがとうございます。 Error CS0117: 'Button' does not contain a definition for 'Name' (CS0117) というエラーが出てしまいます。 xamlでのようにx:Nameとしても同じ結果となってしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問