2014-11-25 62 views
1

我有一个Windows窗体应用程序,其中包含一对面板中的一对标签,一个按钮和一个组合框。调整Windows窗体应用程序中的标签大小

this.pnlSuboptions.Controls.Add(this.label1); 
this.pnlSuboptions.Controls.Add(this.cboPtSize); 
this.pnlSuboptions.Controls.Add(this.label2); 
this.pnlSuboptions.Controls.Add(this.btnSelect); 

我在尝试为我的标签加载本地化字符串时遇到了我的标签问题。某些语言的本地化字符串比英文字符串大。在这种情况下,标签的一部分会隐藏在组合框或按钮下。

我希望标签的大小向左而不是右移。我已经将标签的AutoSize属性设置为true,并且也使用了Anchor属性,但似乎没有任何效果。

我发现了一个SO link其中包含了解决当标签文字的变化,但我敢肯定,我怎么能在我的情况下将此这个问题,其中标签的形式加载过程中读出一次。

有什么建议吗?

+0

autoSize设置为True是错误的事情,在这里做。设置其MaximumSize属性,并为两行文本留出足够空间或设置AutoEllipsis = True。 – 2014-11-25 11:17:45

回答

3

你可以把它们放入一个TableLayoutPanel有2列和两行。每个标签都在每行的左侧,并且两个组合框/按钮都进入其他单元格(每行的右侧)。

然后,您必须停靠两个元素(Dock Fill)并将列设置为AutoSize。 (你可以在图片中看到)

AutoSize Columns

您可能还需要到TablePanelLayout停靠到您共同面板。

正如您在下图中看到的,两个TablePanelLayout都具有相同的组件。但在第二部分中,我改变了label3的文字。

enter image description here

希望它能帮助。 (也为我的英语不好对不起,这不是我的母语,请随时纠正任何错误的拼写,谢谢!)

+0

虽然我想把所有的控件都放在同一行,但是你的建议非常适合。使用TableLayoutPanel,我的标签现在可以正确显示在窗体上,而不会与其他控件重叠。 – 2014-11-25 12:48:12

1

从我的第一个建议是:

  1. 设置autoSize属性False
  2. 确保宽度比通过调整标签大小所需的宽度大得多。
  3. 无论接收到什么内容,该标签现在都应该很好地适合。

第二个建议,你可以使用GDI +来确定文本的大小,然后调整标签据此见http://msdn.microsoft.com/en-us/library/6xe5hazb(v=vs.110).aspx

Graphics gfx = this.label1.CreateGraphics(); // I think its called that, cant remember :) 

Font stringFont = new Font("Arial", 16); 

// Measure string. 
SizeF stringSize = new SizeF(); 
stringSize = gfx.MeasureString(this.label1.Text, stringFont); 
this.label1.Size = new Size((int)stringSize.Width, (int)stringSize.Height); 

噢我差点忘了。确保你是面板不是裁剪的原因。我的意思是,检查面板是否足够大,以使标签适合:-)

希望这有助于!

最好的问候, Zerratar

相关问题