アプリケーションをC#+ Winformsで翻訳する過程で、言語に応じてボタンのテキストを変更する必要があります。
私の問題は次のとおりです。
「こんにちは!」のボタンを翻訳したいとしましょう。 「ボンジュール・トゥール・モンド」へ!
ご想像のとおり、英語のテキストとフランス語のテキストを入力すると、ボタンのサイズは同じになりません...私の質問は「シンプル」です。テキストがコンテンツに合うように、ボタンのサイズをその場で変更するにはどうすればよいですか。ボタン?
これまでのところ、私はそのようなものを手に入れました!
[こんにちは、みんな!]
[ボンジュール]
あなたの最善の策は、説明されているように 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";
}
他の投稿者が言っているように、基礎となるGraphics
オブジェクトを使用する必要はまったくありません。
ボタンのAutoSize
プロパティをtrueに設定し、AutoSizeMode
をGrowAndShrink
に設定し、AutoEllipsis
をfalseに設定すると、テキストに合わせて自動的にサイズが変更されます。
そうは言っても、この変更をUIに合わせるには、いくつかのレイアウト調整が必要になる場合があります。ボタンのパディングを調整してテキストの周囲にスペースを追加したり、ボタンをTableLayoutPanel
(または何か)に配置して、サイズ変更時にボタンが重ならないようにすることができます。
編集:@mastroは次のように指摘しました:AutoEllipsis
はAutoSize
がfalse
の場合にのみ有効です( ドキュメント で説明されているように)。他の3つのプロパティが正しく設定されている限り、安全に無視されます。
これを試して:
Button.AutoSize = true;
Button.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly;
Button.TextAlign = ContentAlignment.MiddleLeft;
Button.Padding = new Padding(0, 0, 0, 0);
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
)を使用でき、ボタンは必要に応じて縮小されることに注意してください。
Andrew Hanlon が説明しているように、AutoSize = true
を設定できます。
その際、ボタンをFlowLayoutPanel
に配置することで、ボタンの完全なレイアウトを自動的に実現することもできます。
FlowDirection
のFlowLayoutPanel
がLeftToRight
またはRightToLeft
の場合、それらの間の水平距離は常に同じままです。ボタンのMargin
プロパティを適切に設定することで、この距離を調整できます。新しいグループを開始するボタンの左マージンを増やすことで、ボタンのグループを作成できます。
ボタンのDock
プロパティをDockStyle.Fill
に設定すると、FlowDirection
のFlowLayoutPanel
がTopDown
またはBottomUp
の場合、最も幅の広いボタンに合わせて幅が自動的に拡大します。
btn.AutoSizeMode = AutoSizeMode.GrowOnly;
btn.AutoSize = true;
btn.Dock = DockStyle.Fill;
他の回答で提案されているように、AutoSize
をtrue
に設定しAutoSizeMode
をGrowAndShrink
に設定することに加えて、TextImageRelation
プロパティ。ボタンの画像を設定している場合は、テキストが画像と重ならないようにします。