web-dev-qa-db-ja.com

テキストに応じてボタンのサイズを変更する方法

アプリケーションをC#+ Winformsで翻訳する過程で、言語に応じてボタンのテキストを変更する必要があります。

私の問題は次のとおりです。

「こんにちは!」のボタンを翻訳したいとしましょう。 「ボンジュール・トゥール・モンド」へ!

ご想像のとおり、英語のテキストとフランス語のテキストを入力すると、ボタンのサイズは同じになりません...私の質問は「シンプル」です。テキストがコンテンツに合うように、ボタンのサイズをその場で変更するにはどうすればよいですか。ボタン?

これまでのところ、私はそのようなものを手に入れました!

[こんにちは、みんな!]

[ボンジュール]

17
Andy M

あなたの最善の策は、説明されているように AutoSize プロパティを設定することです それぞれの答え

ただし、AutoSizeが機能しない場合は、コードでボタンのサイズを変更するのは簡単です。ボタンの幅を設定するだけです。秘訣は、テキストに収まる大きさにすることです。

   using(Graphics cg =  this.CreateGraphics())
   {
       SizeF size = cg.MeasureString("Please excuse my dear aunt sally",this.button1.Font);

       // size.Width+= 3; //add some padding .net v1.1 and 1.0 only
       this.button1.Padding = 3;
       this.button1.Width = (int)size.Width;

       this.button1.Text = "Please excuse my dear aunt sally";
   }
22
Conrad Frix

他の投稿者が言っているように、基礎となるGraphicsオブジェクトを使用する必要はまったくありません。

ボタンのAutoSizeプロパティをtrueに設定し、AutoSizeModeGrowAndShrinkに設定し、AutoEllipsisをfalseに設定すると、テキストに合わせて自動的にサイズが変更されます。

そうは言っても、この変更をUIに合わせるには、いくつかのレイアウト調整が必要になる場合があります。ボタンのパディングを調整してテキストの周囲にスペースを追加したり、ボタンをTableLayoutPanel(または何か)に配置して、サイズ変更時にボタンが重ならないようにすることができます。

編集:@mastroは次のように指摘しました:AutoEllipsisAutoSizefalseの場合にのみ有効です( ドキュメント で説明されているように)。他の3つのプロパティが正しく設定されている限り、安全に無視されます。

26
Andrew Hanlon

これを試して:

Button.AutoSize = true;
Button.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly;
Button.TextAlign = ContentAlignment.MiddleLeft;
Button.Padding = new Padding(0, 0, 0, 0);
8
Rei Salazar

WinFormsのボタンをテキストのサイズに応じて拡大または縮小できるようにするには、ボタンのAutoSizeプロパティをTrueに設定し、AutoSizeModeプロパティをGrowAndShrinkに設定する必要があります。

// C#
btn.AutoSize = true;
btn.AutoSizeMode = AutoSizeMode.GrowAndShrink;

' VB.NET
btn.AutoSize = True
btn.AutoSizeMode = AutoSizeMode.GrowAndShrink

AutoSizeプロパティは、AutoSizeModeプロパティがGrowOnlyに設定されている場合にのみ、ボタンのサイズを拡大できることに注意してください。 AutoSizeModeプロパティをGrowAndShrinkに変更することにより、ボタンはTextプロパティに基づいて幅と高さが自動的に拡大または縮小されるようになりました。

また、上記のように2つのプロパティを設定する際に、Textプロパティの新しい行(Environment.NewLineまたはvbCrLf)を使用でき、ボタンは必要に応じて縮小されることに注意してください。

1
Willy Kimura

Andrew Hanlon が説明しているように、AutoSize = trueを設定できます。

その際、ボタンをFlowLayoutPanelに配置することで、ボタンの完全なレイアウトを自動的に実現することもできます。

FlowDirectionFlowLayoutPanelLeftToRightまたはRightToLeftの場合、それらの間の水平距離は常に同じままです。ボタンのMarginプロパティを適切に設定することで、この距離を調整できます。新しいグループを開始するボタンの左マージンを増やすことで、ボタンのグループを作成できます。

ボタンのDockプロパティをDockStyle.Fillに設定すると、FlowDirectionFlowLayoutPanelTopDownまたはBottomUpの場合、最も幅の広いボタンに合わせて幅が自動的に拡大します。

btn.AutoSizeMode = AutoSizeMode.GrowOnly;
btn.AutoSize = true;
btn.Dock = DockStyle.Fill;

他の回答で提案されているように、AutoSizetrueに設定しAutoSizeModeGrowAndShrinkに設定することに加えて、TextImageRelationプロパティ。ボタンの画像を設定している場合は、テキストが画像と重ならないようにします。

0
cezary