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

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

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

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

2回答

11291閲覧

文字列の横幅・縦幅を取得したい

fender0131

総合スコア121

C#

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

1クリップ

投稿2015/11/30 09:20

編集2015/11/30 10:28

いつも大変お世話になっております。

ボタン内に入力される文字の縦幅・横幅を見て、文字が納まるように自動でボタンサイズを変えたいのですが、
ボタンサイズがwidth=75、Heigh=23のまま変化しません。

何が原因でしょうか?
お手数おかけして申し訳ございませんが、どなた様かご指導ご鞭撻の程よろしくお願い致します。

private void test_fm_Load(object sender, EventArgs e) { this.MainMenuStrip = new MenuStrip(); int FontSize = 15; // ボタンフォントサイズ for (int i = 0; i < 5; i++ ) { btnArray[i] = new Button(); } btnArray[0].Text = "あ"; btnArray[1].Text = "あい"; btnArray[2].Text = "あいう"; btnArray[3].Text = "あいうえ"; btnArray[4].Text = "あいうえお"; for (int i = 0; i < 5; i++) { btnArray[i].Location = new Point(100 * i + 10, 0); btnArray[i].Font = new Font("Arial", FontSize); btnArray[i].Size = new System.Drawing.Size(btnArray[i].Width, btnArray[i].Height); this.Controls.Add(btnArray[i]); } }

追記1====================================

お答え頂きありがとうございました。
大変参考になりました。

ボタン内の文字のサイズを見て自動でボタンサイズを変えることができました。
ここでひとつ疑問が生まれました。

今度は、一番文字サイズが大きく、一番ボタンサイズが大きかったものを基準に他のボタンのサイズを変えようとしたのですが
上手くいきませんでした。(「あいうえお」」の文字サイズですべてのボタンを作ろうとしています。)

以下のプログラムで実行しました。

btnArray[i].Width・btnArray[i].Height の値をうまく拾えていないような結果が出ました。
(デバックすると、width=75、Heigh=23、の値しか入ってきません)

もしよろしければ再度お答えいただけないでしょうか。

private void test_Load(object sender, EventArgs e) { this.MainMenuStrip = new MenuStrip(); int FontSize = 15; // ボタンフォントサイズ var btnArrayW_Max=0; int btnArrayH_Max=0; for (int i = 0; i < 5; i++ ) { btnArray[i] = new Button(); } btnArray[0].Text = "あ"; btnArray[1].Text = "あい"; btnArray[2].Text = "あいう"; btnArray[3].Text = "あいうえ"; btnArray[4].Text = "あいうえお"; for (int i = 0; i < 5; i++) { btnArray[i].Location = new Point(100 * i + 10, 0); btnArray[i].Font = new Font("Arial", FontSize); btnArray[i].AutoSize = true; btnArray[i].AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; if (i == 4) { for (i = 0; i < 4; i++) { btnArrayW_Max = Math.Max((int)btnArray[i].Width, (int)btnArray[i + 1].Width); btnArrayH_Max = Math.Max((int)btnArray[i].Height, (int)btnArray[i + 1].Height); } for (i = 0; i < 5; i++) { btnArray[i].Size = new System.Drawing.Size(btnArrayW_Max, btnArrayH_Max); this.Controls.Add(btnArray[i]); } } }

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

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

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

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

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

guest

回答2

0

追記1に対する回答ですが、

C#

1btnArray[i].AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;

これは自動でボタンサイズを拡大も縮小もするという意味になります。
そのため、いくらSizeを設定してもTextの文字列によって自動的に拡大縮小されます。
縮小しないのであれば以下に書き換えてください。

C#

1btnArray[i].AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly;

投稿2015/11/30 11:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

fender0131

2015/12/01 08:47

意味を分からないまま使用していたので、大変参考になりました。 Autosizemodeにもいろいろな機能があるのですね。
guest

0

ベストアンサー

こんにちは。

WinFormで良いですかね。
とりあえずフレームワークに自動でサイズ変更してもらいたいという意図であれば、
AutoSizeプロパティと、必要に応じてAutoSizeModeプロパティを設定してみてください。

C#

1btnArray[i].Location = new Point(100 * i + 10, 0); 2btnArray[i].Font = new Font("Arial", FontSize); 3btnArray[i].AutoSize = true; 4btnArray[i].AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; 5//btnArray[i].Size = new System.Drawing.Size(btnArray[i].Width, btnArray[i].Height);

C#

1btnArray[0].Text = "あ"; 2btnArray[1].Text = "あい"; 3btnArray[2].Text = "あいう"; 4btnArray[3].Text = "あいうえ"; 5btnArray[4].Text = "あいうえお"; 6 7//まずAddさせてAutoSizeしてもらう 8for (int i = 0; i < 5; i++) 9{ 10 btnArray[i].Location = new Point(100 * i + 10, 0); 11 btnArray[i].Font = new Font("Arial", FontSize); 12 btnArray[i].AutoSize = true; 13 btnArray[i].AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; 14 15 this.Controls.Add(btnArray[i]); 16 //if (i == 4) 17 //{ 18 // for (i = 0; i < 4; i++) 19 // { 20 // btnArrayW_Max = Math.Max((int)btnArray[i].Width, (int)btnArray[i + 1].Width); 21 // btnArrayH_Max = Math.Max((int)btnArray[i].Height, (int)btnArray[i + 1].Height); 22 // } 23 // for (i = 0; i < 5; i++) 24 // { 25 // btnArray[i].Size = new System.Drawing.Size(btnArrayW_Max, btnArrayH_Max); 26 // this.Controls.Add(btnArray[i]); 27 // } 28 //} 29} 30 31//その後に最大サイズ図る 32var maxSize = new Size(btnArray.Max(x => x.Size.Width), btnArray.Max(x => x.Size.Height)); 33 34//サイズ変更&AutoSize切る 35btnArray.Select(x => 36{ 37 x.AutoSize = false; 38 x.Size = maxSize; 39 return x; 40}).ToList();

投稿2015/11/30 09:40

編集2015/11/30 10:45
Tak1wa

総合スコア4791

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

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

fender0131

2015/11/30 10:18

お答えありがとうございます。 最後に一つ追記させて頂きたいのですが宜しいでしょうか? もしよろしければお答えいただけないでしょうか?
Tak1wa

2015/11/30 10:45

追記しました。
fender0131

2015/12/01 08:46

お返事遅くなり大変申し訳ございませんでした。 ソースコード大変参考になりました。 思い通りの結果を出力することができました。 var maxSize = new Size(btnArray.Max(x => x.Size.Width), btnArray.Max(x => x.Size.Height));部分なのですが、このままですとエラーになってしまいましたので、 var maxSize = new Size(btnArray.Max(x => btnArray[i].Size.Width), btnArray.Max(x => btnArray[i].Size.Height));と書き換えさせて頂きました。 勉強になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問