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

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

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

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

3回答

1254閲覧

Windows Formで数多くのButtonを効率よく配置・設定したい

Sasaki1040

総合スコア13

C#

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

1クリップ

投稿2019/03/07 08:14

編集2019/03/07 09:02

動作環境

Windows10 home
Visualstudio2017

課題

現在WindowsFormsの学習をしているのですが、Buttonなどのコントローラーを多数使う際に、一つ一つデザイナーから設定していくと、かなり時間がかかってしまい非効率なのでループなどで一斉に配置・設定ができる方法があればご教授いただければ幸いです。

一応、以下のようにして設定を一斉に変える方法があるのですが、これではボタンの管理が大変になってしまうという欠点があります。

C#

1for(i = 0;i < 50;i++){ 2 Control[] ctr = Controls.Find("button" + i, true); 3 ((button)ctr[0]).Text = "ABC"; 4}

イメージ画像

イメージ説明

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

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

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

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

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

takabosoft

2019/03/07 08:26

「これではボタンの管理が大変になってしまうという欠点」というのがよくわかりませんが、具体的にどう大変なのでしょうか?また、実際にテキストをABCに変えたいわけではないと思いますが、どんな事を一括して設定したいのでしょうか?
Sasaki1040

2019/03/07 08:39

ご質問ありがとうございます。 本来の目的といたしましては、約50個のボタンのTextにそれぞれ異なる名前を振っていきたいのと質問に記入させていただきましたコードでは、Buttonのコントローラー名を「Button1」のような分かりにくい名前にする必要があり、ソースコードで処理を書くときに見にくいコードになってしまうために「ボタンの管理が大変になる」と記入させていただきました。
takabosoft

2019/03/07 08:57 編集

ということは、button1などではなく、手動で判りやすい名前を付けたいのですね。 (okButtonなど) Textプロパティには異なる文字列を設定したいとありますが、それはどのようなルールで文字列が決定されるのでしょうか? 今の所、全てがバラバラな気がするため、一括で設定出来る要素が無い気がするのですが・・・。 ※デザイナーを使った現状でどんな作業をしていてどんな問題が起きているのか、いまいち読み手にはわからないです。
Sasaki1040

2019/03/07 09:04

ご返信ありがとうございます。 質問にイメージの画像を追加させていただきました。 Textプロパティへの文字列設定は画像のように「A1」「B1」と設定したいと思っております。
Zuishin

2019/03/07 09:40

button1, button2 と何が違うんですかこれ?
guest

回答3

0

一応これで質問の要件は満たしているかと。

C#

1using System.Data; 2using System.Drawing; 3using System.Linq; 4using System.Windows.Forms; 5 6namespace WindowsFormsApp1 7{ 8 public partial class Form1 : Form 9 { 10 public Form1() 11 { 12 InitializeComponent(); 13 14 const int columnCount = 5; 15 const int rowCount = 5; 16 17 var tabLayout = new TableLayoutPanel() 18 { 19 Parent = this, 20 Dock = DockStyle.Fill, 21 ColumnCount = columnCount, 22 RowCount = rowCount 23 }; 24 tabLayout.ColumnStyles.Clear(); 25 for (int i = 0; i < columnCount; i++) 26 { 27 tabLayout.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50)); 28 } 29 tabLayout.RowStyles.Clear(); 30 for (int i = 0; i < rowCount; i++) 31 { 32 tabLayout.RowStyles.Add(new RowStyle(SizeType.Percent, 50)); 33 } 34 var buttons = Enumerable 35 .Range(0, rowCount) 36 .SelectMany(row => Enumerable 37 .Range(0, columnCount) 38 .Select(column => new Button() 39 { 40 Parent = tabLayout, 41 Text = $"{(char)('A' + column)}{row + 1}", 42 Anchor = AnchorStyles.None 43 })) 44 .ToDictionary(button => button.Text); 45 46 buttons["B1"].BackColor = Color.Red; 47 } 48 } 49}

投稿2019/03/07 11:15

Zuishin

総合スコア28660

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

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

0

話がいまいちわかりませんが,てきとーにforでボタン群をnewして生成し,その際にそのボタン群への参照を別途覚えておけば良いのでは.

CSharp

1//何かこんなメンバでボタン群の参照を持っておけば 2//forでまとめて設定~等の作業ができるのでは 3List<Button> m_Buttons = new List<Button>(); 4 5//配置:FormのLoadイベントとかそういうところで配置すればよいのでは 6for( int y=0; y<3; ++y ) 7{ 8 for( int x=0; x<5; ++x ) 9 { 10 var Btn = new Button(); 11 Btn.Size = new Size( 40,40 ); 12 Btn.Location = new Point( x*50,y*50 ); 13 14 m_Buttons.Add( Btn ); //前記メンバに参照を追加しとく 15 this.Controls.Add( Btn ); 16 } 17}

投稿2019/03/07 09:32

fana

総合スコア11658

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

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

0

ユーザーコントロールにボタンを10個とか50個配置したのを用意しといて、そいつを貼っていく、というのではどでしょ。

投稿2019/03/07 08:21

y_waiwai

総合スコア87774

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

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

Sasaki1040

2019/03/07 08:43 編集

ご回答ありがとうございます。 配置すること自体はコピーなので簡単にできるのですが、今回の最大の目的としては各ボタンのプロパティや処理の設定などを効率よく設定したいと思っておりました。
y_waiwai

2019/03/07 09:29

どのみちそういうのは手動でやらないとしようがないんじゃないかと。 まあ、多数のボタンと言う時点でそもそもの設計に問題がありそうですが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問