我们怎样才能自动换行功能在标签Windows窗体 ?
我把一个标签在面板中增加了一些文字,动态标签。 但它超过了面板的长度。 我该如何解决这个问题?
我们怎样才能自动换行功能在标签Windows窗体 ?
我把一个标签在面板中增加了一些文字,动态标签。 但它超过了面板的长度。 我该如何解决这个问题?
简单的回答: 关掉 自动调整大小 。
这里最大的问题是,标签不会自动改变其高度(仅宽度)。 为了得到这个权利,你将需要继承的标签,包括垂直调整大小的逻辑。
基本上你需要的OnPaint做的是:
您还需要设置ResizeRedraw风格标志在构造函数中。
事实上,接受的答案是不必要的复杂。
如果你的标签设置为自动调整大小,它会自动与您放置任何文本在它成长。 (这包括垂直生长。)
如果你想让它自动换行,在一个特定的宽度,可以设置MAXIMUMSIZE属性。
myLabel.MaximumSize = new Size(100, 0);
myLabel.AutoSize = true;
测试和工程。
在我的情况下(在面板上的标签),我设置label.AutoSize = false
和label.Dock = Fill
。 和标签的文本自动换行。
坏消息:没有一个autowrap属性。
好消息:我们是在隧道尽头的亮光!
您可以以编程方式做到这一点,以它的大小动态,但在这里是最简单的解决方案:
MAXIMUMSIZE =其中width =最大尺寸你想要的标签( 宽度 , 高度 )是和身高 =你要多少像素它包
从MSDN , 自动换行文本在标签 :
using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
public class GrowLabel : Label {
private bool mGrowing;
public GrowLabel() {
this.AutoSize = false;
}
private void resizeLabel() {
if (mGrowing)
return;
try {
mGrowing = true;
Size sz = new Size(this.Width, Int32.MaxValue);
sz = TextRenderer.MeasureText(this.Text, this.Font, sz, TextFormatFlags.WordBreak);
this.Height = sz.Height;
}
finally {
mGrowing = false;
}
}
protected override void OnTextChanged(EventArgs e) {
base.OnTextChanged(e);
resizeLabel();
}
protected override void OnFontChanged(EventArgs e) {
base.OnFontChanged(e);
resizeLabel();
}
protected override void OnSizeChanged(EventArgs e) {
base.OnSizeChanged(e);
resizeLabel();
}
}
我必须找到一个快速的解决方案,所以我只是使用这些属性一个TextBox:
var myLabel = new TextBox
{
Text = "xxx xxx xxx",
WordWrap = true,
AutoSize = false,
Enabled = false,
Size = new Size(60, 30),
BorderStyle = BorderStyle.None,
Multiline = true,
BackColor = container.BackColor
};
有基于@hypo的回答是一个更好的
public class GrowLabel : Label {
private bool mGrowing;
public GrowLabel() {
this.AutoSize = false;
}
private void resizeLabel() {
if (mGrowing)
return;
try {
mGrowing = true;
int width = this.Parent == null ? this.Width : this.Parent.Width;
Size sz = new Size(this.Width, Int32.MaxValue);
sz = TextRenderer.MeasureText(this.Text, this.Font, sz, TextFormatFlags.WordBreak);
this.Height = sz.Height + Padding.Bottom + Padding.Top;
} finally {
mGrowing = false;
}
}
protected override void OnTextChanged(EventArgs e) {
base.OnTextChanged(e);
resizeLabel();
}
protected override void OnFontChanged(EventArgs e) {
base.OnFontChanged(e);
resizeLabel();
}
protected override void OnSizeChanged(EventArgs e) {
base.OnSizeChanged(e);
resizeLabel();
}
}
int width = this.Parent == null ? this.Width : this.Parent.Width;
这可以让你停靠到父,例如面板时使用自动增长的标签。
this.Height = sz.Height + Padding.Bottom + Padding.Top;
在这里,我们照顾填充的顶部和底部。
处理ClientSizeChanged event
的面板,使标签填充空间:
private void Panel2_ClientSizeChanged(object sender, EventArgs e) { label1.MaximumSize = new Size((sender as Control).ClientSize.Width - label1.Left, 10000); }
设置Auto-Size
的标签, true
Dock
为标签Fill
不知道它会适合所有的用例,但我经常使用的一个简单的技巧,以获得包装行为:把你的Label
与AutoSize=false
1x1的内TableLayoutPanel
,将照顾的Label
的尺寸。
设置AutoEllipsis属性为“TRUE”和AutoSize属性为“假”。
如果您的面板被限制你的标签的宽度,您可以将标签的Anchor属性设置为左,右,并设置自动调整大小为true。 这在概念上类似于监听小组的SizeChanged
事件和更新标签的MAXIMUMSIZE到一个new Size(((Control)sender).Size.Width, 0)
所建议前面的回答 。 在Anchor属性中列出的每个侧,那么,锚定到含有控制的各自的内侧。 因此,上市相对的两侧在锚有效地设置控件的尺寸。 锚定到左,右设置控件的宽度属性和锚定到顶部和底部将设置其高度属性。
该解决方案,如C#:
label.Anchor = AnchorStyles.Left | AnchorStyles.Right;
label.AutoSize = true;
如果你真的想设置标签宽度无关的内容,我觉得最简单的方法是这样的:
现在的标签是固定的宽度,但它会自动调整其高度。
那么对于动态文本,缩小字体大小。 如果有必要,在标签文本设置副使用这个片段:
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
这帮助我在我的表叫InpitWindow:在设计师的标签:
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);
}
我的表格整个代码
如果按钮的尺寸必须保持不变:
myButton.Text = "word\r\nwrapped"
这个问题的答案很简单,改变标签的Dock属性。 这是“NONE”默认情况下。
使用style="overflow:Scroll"
的标签,如下面的HTML。 这将在面板中的添加标签滚动条。
<asp:Label
ID="txtAOI"
runat="server"
style="overflow:Scroll"
CssClass="areatext"
BackColor="White"
BorderColor="Gray"
BorderWidth="1"
Width = "900" ></asp:Label>