If Me.Size.Height - (Label12.Location.Y + Label12.Height) < 20 Then
Dim naam As String = Label12.Font.Name
Dim size As Single = Label12.Font.SizeInPoints - 1
Label12.Font = New Font(naam, size)
End If
0
这帮我在我的Form InpitWindow:在Designer for Label中:
AutoSize = true;
Achors = Top, Left, Right.
private void InputWindow_Shown(object sender, EventArgs e) {
lbCaption.MaximumSize = new Size(this.ClientSize.Width - btOK.Width - btOK.Margin.Left - btOK.Margin.Right -
lbCaption.Margin.Right - lbCaption.Margin.Left,
Screen.GetWorkingArea(this).Height / 2);
this.Height = this.Height + (lbCaption.Height - btOK.Height - btCancel.Height);
//Uncomment this line to prevent form height chage to values lower than initial height
//this.MinimumSize = new Size(this.MinimumSize.Width, this.Height);
}
//Use this handler if you want your label change it size according to form clientsize.
private void InputWindow_ClientSizeChanged(object sender, EventArgs e) {
lbCaption.MaximumSize = new Size(this.ClientSize.Width - btOK.Width - btOK.Margin.Left * 2 - btOK.Margin.Right * 2 -
lbCaption.Margin.Right * 2 - lbCaption.Margin.Left * 2,
Screen.GetWorkingArea(this).Height / 2);
}
16 回答
实际上,接受的答案是不必要的复杂 .
如果将标签设置为AutoSize,它将随您放入的任何文本自动增长 . (这包括垂直增长 . )
如果要使其以特定宽度进行自动换行,可以设置MaximumSize属性 .
经过测试和工作 .
在我的情况下(面板上的标签)我设置
label.AutoSize = false
和label.Dock = Fill
. 标签文本会自动换行 .坏消息:没有autowrap属性 .
好消息:隧道尽头有一盏灯!
您可以通过编程方式完成此操作以动态调整大小,但这是最简单的解决方案:
选择标签的属性
AutoSize = True
MaximumSize =(宽度,高度),其中宽度=您希望标签的最大尺寸和高度=您希望它包裹的像素数
快速回答:切换 off AutoSize .
这里的一个大问题是标签不会自动改变其高度(仅宽度) . 要做到这一点,您需要对标签进行子类化并包含垂直调整大小逻辑 .
基本上你在OnPaint中需要做的是:
测量文本的高度(Graphics.MeasureString) .
如果标签高度不等于文本高度设置的高度并返回 .
绘制文字 .
您还需要在构造函数中设置ResizeRedraw样式标志 .
这个问题的简单答案是更改Label的DOCK属性 . 默认为“无” .
来自MSDN,Automatically Wrap Text in Label:
我必须找到一个快速的解决方案,所以我只使用了具有这些属性的TextBox:
根据@hypo的答案有一个更好的答案
int width = this.Parent == null ? this.Width : this.Parent.Width;
这允许您在停靠父母时使用自动增长标签,例如小组 .this.Height = sz.Height + Padding.Bottom + Padding.Top;
这里我们负责顶部和底部的填充 .将标签放在面板内
处理面板的
ClientSizeChanged event
,使标签填满空格:为标签设置
Auto-Size
为true
为标签设置
Dock
为Fill
不确定它是否适合所有用例但我经常使用一个简单的技巧来获取包装行为:将
Label
与AutoSize=false
放在1x1TableLayoutPanel
中,它将处理Label
的大小 .将AutoEllipsis属性设置为“TRUE”,将AutoSize属性设置为“FALSE” .
如果您的面板限制了标签的宽度,您可以将标签的Anchor属性设置为Left,Right并将AutoSize设置为true . 这在概念上类似于监听Panel的
SizeChanged
事件,并按照a previous answer的建议将标签的MaximumSize更新为new Size(((Control)sender).Size.Width, 0)
. Anchor属性中列出的每一方都锚定到包含Control的相应内侧 . 因此,在Anchor中列出两个相反的方面可以有效地设置控件的维度 . 锚定到Left和Right设置Control的Width属性,Anchoring to Top和Bottom将设置其Height属性 .这个解决方案,作为C#:
如果你真的想要设置独立于内容的标签宽度,我发现最简单的方法是:
设置自动调整为真
将最大宽度设置为您想要的宽度
设置相同的最小宽度
现在标签的宽度不变,但它会自动调整高度 .
然后对于动态文本,减小字体大小 . 如有必要,请在设置标签文本的子网站中使用此代码段:
这帮我在我的Form InpitWindow:在Designer for Label中:
Whole code of my form
如果按钮的尺寸需要保持不变:
在标签中使用
style="overflow:Scroll"
,如下面的HTML所示 . 这将在面板中的标签中添加滚动条 .