###前提・実現したいこと
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を設定することでコントロールに動的に名前がつけられるかと思います。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/31 13:06