如何自动调整Label的高度

wisecloud 2007-05-07 02:41:05
Label的宽度是定死的,希望在Text改变是自动调整Label的高度,以保证文本都能显示出来。应该怎么处理?
如果Label不行,有其他好用的控件吗?
...全文
911 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
gushangmoqi 2010-11-05
  • 打赏
  • 举报
回复
一个最简单的办法,把label控件放在容器控件TabelLayoutpanel中,可以全部显示内容,也可以实现自动换行。只要拖动TabelLayoutpanel大小就可以实现每行显示多少字!
wisecloud 2007-05-08
  • 打赏
  • 举报
回复
sq_zhuyi(), 是啊。
路人乙e 2007-05-08
  • 打赏
  • 举报
回复
莫非lz要在程序执行期间设置label内容??
wisecloud 2007-05-08
  • 打赏
  • 举报
回复
lovingkiss(坦白从良 抗拒强奸),谢谢。这个办法我也考虑了,可是因为涉及英文单词拆字的问题,可能不太准。
lovingkiss 2007-05-08
  • 打赏
  • 举报
回复
只能重绘的时候来判断了~~——如果是这样子的话,你还不如重写Label。
lovingkiss 2007-05-08
  • 打赏
  • 举报
回复
我没有更好的法子,用笨办法吧。

Private Sub Label1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Label1.Paint
Dim RowNumber As Integer
If e.Graphics.MeasureString(Label1.Text, Label1.Font).Width Mod Label1.Width = 0 Then
RowNumber = e.Graphics.MeasureString(Label1.Text, Label1.Font).Width / Label1.Width
Else
RowNumber = e.Graphics.MeasureString(Label1.Text, Label1.Font).Width / Label1.Width + 1
End If
Label1.Height = RowNumber * e.Graphics.MeasureString(Label1.Text, Label1.Font).Height
End Sub
lovingkiss 2007-05-08
  • 打赏
  • 举报
回复
lovejxl,a和A的高度和宽度是不同的
wisecloud 2007-05-08
  • 打赏
  • 举报
回复
lovingkiss(坦白从良 抗拒强奸),你的代码效果不错,谢谢!
lovejxl 2007-05-08
  • 打赏
  • 举报
回复
private void label1_TextChanged(object sender, EventArgs e)
{
label1.Height=xx*Math.Ceiling(label1.Text.Length/yy);
//xx是你一行文本的高度,yy是你一行文本的字符数,在字体和宽度固定的场合这两个数据应该很容易取得
}

lovingkiss 2007-05-08
  • 打赏
  • 举报
回复
楼上的代码——我晕死了,什么和什么啊
SELECT_SUN 2007-05-08
  • 打赏
  • 举报
回复
int a = this.label1.Height;
int b =this.label1.Width;
string text = "qwertyuiopasdfghjklzxcvbnm";
if(b==text.Length)
{
this.label1.Text = "qwertyuiopasdfghjklzxcvbnm";
}
else
{
this.label1.Height = a+a;
this.label1.Text = "qwertyuiopasdfghjklzxcvbnm";
}
lovingkiss 2007-05-08
  • 打赏
  • 举报
回复
你所担心的不外乎是英文一行不满两行多余的问题,在用我给你的方法里面,是不存在这个问题的。你担心的事是
I Will
abcdefghijilasdfasdf

第一行放不下第三个单词就必须平白无故的就要换行了,是吧?拜托看看代码的效果再说。谢谢
lovingkiss 2007-05-08
  • 打赏
  • 举报
回复
英文单词拆字?靠,这是e.Graphics.MeasureString,计算机计算出来的长度和宽度,又不是你自己计算的。

搞编程还能说“可能不太准”?是否准确你不会试验一下?为了你的问题我都动手编程,你自己反而不能去试验一下,Why?
wisecloud 2007-05-07
  • 打赏
  • 举报
回复
大家好像对问题不太清楚,可能是我没说清。
Label的宽度是固定的,有时候Text很长或很短,长的话Label会自动换行,所以希望高度能根据Text的高度自动调整。保证所有文本都能显示出来,又不浪费空间。

目前为止大家的回复帮助不大。不过谢谢支持。
sz709 2007-05-07
  • 打赏
  • 举报
回复
楼主可以使用容器Panel来解决,如
把lable1放在panel1中,设置dock为fill

this.panel1.Width =30;
this.label1.AutoSize = false;
this.label1.Text = "123456789012345678901234567890";
biglazy 2007-05-07
  • 打赏
  • 举报
回复

楼上
楼主要求label的宽度是固定的啊
但是高度可以根据text的长度变化
好让全部显示出来

我觉得应该用别的来实现吧
weiguo06 2007-05-07
  • 打赏
  • 举报
回复
同意ls
lovingkiss 2007-05-07
  • 打赏
  • 举报
回复
Label的宽度是定死的?

autosize=false 就可以调整宽度了阿

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧