C#在WinForm开发中Label换行方法

很多朋友都会在开发WinForm中遇到Label要显示的内容太长,但却不能换行的问题.这里我总结了几种方法,供大家参考。

第一种是把Label的AutoSize属性设为False,手动修改Label的大小.这样的好处是会因内容的长度而自动换行,但是当内容的长度超过所设定的大小时,多出的内容就会无法显示.因此,这种方法适合于基本确定内容长度的时候使用。

第二种是把Label的Dock设为FILL,同时将AutoSize属性设为False,这种方法可将上面所说的缺点修正,但是同时Label会将其它控件的位置霸占,影响布局.因此,在使用该方法时,最好给Label加上个Panel或GroupBox控件。

第三种是通过判断内容的长度,动态设置Label的大小.具体程序如下(Label控件取名为Label1,显示内容的字符串为str):

 

int LblNum = str.Length;   //Label内容长度
int RowNum = 10;   //每行显示的字数

 

float FontWidth = label1.Width / label1.Text.Length;    //每个字符的宽度
int RowHeight=15;   //每行的高度

 

int ColNum=(LblNum-(LblNum/RowNum)*RowNum)==0?(LblNum/RowNum):(LblNum / RowNum)+1;   //列数
label1.AutoSize = false;    //设置AutoSize
label1.Width = (int)(FontWidth * 10.0);   //设置显示宽度
label1.Height = RowHeight * ColNum;   //设置显示高度

 

通过这种方法可以令Label每行所显示的字数得到控制,同时也动态的生成的所对应的行数,这对于排版有很大的好处,但是如果显示内容过多,该方法也会令多出来的内容无法显示.因此,对于显示内容过长的时候,可以在外层加上Panel或GroupBox,设置AutoScroll为true,这样就不会因为太长而导致Label高度扩大而影响其它控件的布局,同时也可以更好地显示完整的内容。

三种方法都有它的优缺点,没有说谁优谁劣,只有最适合的,朋友们不妨试试

转载于:https://www.cnblogs.com/zhangchenliang/archive/2012/08/17/2643807.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要缩短WinFormLabel控件换行后的上下间距,可以通过以下两种方法实现: 1. 自定义Label控件 可以自定义一个Label控件,继承自System.Windows.Forms.Label类,并重写OnPaint方法,在绘制文本时修改文本的行间距。 以下是一个示例代码: ``` public class CustomLabel : System.Windows.Forms.Label { private const int EM_SETLINESPACING = 0x00A5; [DllImport("user32.dll")] public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); protected override void OnPaint(PaintEventArgs e) { IntPtr hDC = e.Graphics.GetHdc(); SendMessage(this.Handle, EM_SETLINESPACING, IntPtr.Zero, (IntPtr)(int.MaxValue & 0xFFFF)); e.Graphics.ReleaseHdc(hDC); base.OnPaint(e); } } ``` 在这个示例,我们使用了Windows API的SendMessage函数,向Label控件发送EM_SETLINESPACING消息,从而修改文本的行间距。在OnPaint方法,我们首先获取绘制文本的设备上下文hDC,然后调用SendMessage函数,向Label控件发送消息,最后释放设备上下文。 使用这个自定义的控件替换原来的Label控件即可。 2. 使用自定义字体 另一种方法是使用自定义字体,在字体的属性调整行间距。 在设计时,可以选择一个适当的字体,然后在字体的属性调整行间距。在代码,可以通过以下方式加载字体: ``` Font font = new Font("Microsoft YaHei", 12, FontStyle.Regular); font = new Font(font.FontFamily, font.Size, FontStyle.Regular, GraphicsUnit.Pixel); font = new Font(font.FontFamily, font.Size, FontStyle.Regular, GraphicsUnit.Pixel, 0, true); ``` 在这个示例,我们首先创建一个字体对象,然后调用三个重载的构造函数,分别设置字体的样式、单位和行间距,最后得到一个新的字体对象。 使用这个自定义的字体替换原来的字体即可。注意,如果使用了VisualStyles,可能需要在应用程序的Main方法加入以下代码: ``` Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); ``` 这样才能正确渲染自定义字体。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值