在使用C#+ Winforms翻譯應用程序的過程中,我需要根據語言更改按鈕的文本。如何根據文本大小調整按鈕
我的問題是:「嗨!所有」
比方說,我想翻譯從一個按鈕到「Bonjour tout le monde」!
正如你所猜測的,如果我輸入英文文本或法國文件,按鈕的大小將不會相同......我的問題是「簡單」,我怎樣才能設置動態調整按鈕的大小,使文本適合其按鈕內容?
到目前爲止,我有這樣的事情!
[大家好!]
[卓悅]
在使用C#+ Winforms翻譯應用程序的過程中,我需要根據語言更改按鈕的文本。如何根據文本大小調整按鈕
我的問題是:「嗨!所有」
比方說,我想翻譯從一個按鈕到「Bonjour tout le monde」!
正如你所猜測的,如果我輸入英文文本或法國文件,按鈕的大小將不會相同......我的問題是「簡單」,我怎樣才能設置動態調整按鈕的大小,使文本適合其按鈕內容?
到目前爲止,我有這樣的事情!
[大家好!]
[卓悅]
你最好的賭注是描述ach's answer
但是設置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,它會自動調整以適合文本。
也就是說,您可能需要進行多項佈局調整才能使此更改適合您的用戶界面。您可以調整按鈕的填充以在文本週圍添加空間,並且您可能希望將按鈕放在TableLayoutPanel
(或其他)中,以在調整大小時阻止它們重疊。
編輯: @mastro指出:AutoEllipsis
僅當有效AutoSize
是false
(如the documentation解釋),因此它可以,只要其他三個屬性都設置正確安全地忽略。
對於OP的需要,這可能是一個更好的解決方案,因爲它聽起來像是在處理一個相當簡單的secnario。然而,「絕對不需要」的說法是誤導性的。 MeasureString是編程人員構建自定義窗體和控件的最佳工具之一。 Web程序員(通過HTTP處理程序)也可以方便地基於可變文本創建精確大小的圖像。 – 2010-10-19 07:26:37
@Tim - 我沒有對MeasureString說任何負面消息,它有它的用處,但這明顯不是其中之一。用不必要的和任意的(寬度+ = 3)代碼竄改代碼是一種不好的做法。 – 2010-10-19 07:58:30
試試這個:
Button.AutoSize = true;
Button.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly;
Button.TextAlign = ContentAlignment.MiddleLeft;
Button.Padding = new Padding(0, 0, 0, 0);
由於Andrew Hanlon解釋,你可以設置AutoSize = true
。
這樣做時,您也可以通過將它們放置在FlowLayoutPanel
上來自動完成按鈕的完美佈局。
當FlowLayoutPanel
的FlowDirection
爲LeftToRight
或RightToLeft
時,它們之間的水平距離將始終保持不變。您可以通過適當設置按鈕的Margin
屬性來調整此距離。您可以通過增加開始新組的按鈕的左邊距來創建按鈕組。
如果按鈕的Dock
屬性設置爲DockStyle.Fill
,他們甚至會自動以適應於最廣泛的按鈕,如果FlowLayoutPanel
的FlowDirection
是TopDown
或BottomUp
增加他們的寬度。
btn.AutoSizeMode = AutoSizeMode.GrowOnly;
btn.AutoSize = true;
btn.Dock = DockStyle.Fill;
要啓用的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
自動擴展或縮小寬度和高度。
另請注意,在設置上述兩個屬性時,可以使用Text屬性中的新行(Environment.NewLine
或vbCrLf
),並且按鈕將根據需要縮小比例。
非常感謝! – 2010-10-19 06:36:56
難道你不需要添加填充? 'this.button1.Width =(int)size.Width + button1.Padding.Left + button1.Padding.Right;'。如果您在文本的右側或左側有圖像,則必須添加圖像寬度。 – 2016-08-10 12:54:10
@ OlivierJacot-Descombes基於[修訂歷史](http://stackoverflow.com/posts/3965742/revisions)我認爲如此,然後改變了我的答案。由於有一個優越的答案(安德魯的),這對任何使用這個答案的人來說都很容易確定你是否需要考慮填充的大小,否則我會拒絕修改這個答案。 – 2016-08-10 14:36:14