转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> C语言系列 >> 正文
C# WinForm 中Label自动换行 解决方法         ★★★

C# WinForm 中Label自动换行 解决方法

作者:闵涛 文章来源:闵涛的学习笔记 点击数:3074 更新时间:2013/4/6 22:58:55
C# WinForm 中Label自动换行 解决方法

在TableLayoutPannel中放着一些Label

如果把Label的AutoSize属性设成True的话,文字超过label长度时就会自动增加,直到后面的字出窗体以外

设置成False时,一旦到达Label的长度,后面的字符也就显示不出来了

经过我的多番实践,最佳的解决方法是

把Label的Dock属性设置成Fill,并同时把Label的AutoSize属性设成False。

以上只是一种简便的解决方法,如果以上方法解决不了问题,就老老实实计算控件大小以适应文本吧。

-----------------------------------------------------------------

具体方法:

C# WinForm中的Label,Button等控件在布局上和Web Application中不一样。
在WebApplication中,你可以指定它们的Width属性,然后当在指定Width内显示不全时,就自动换行,自动增加其Height 属性。
在WinForm中系统不会替你做这些事情。系统要求你必须同时指定Width和Height属性,缺一不可。当一行显示完而高度不足以显示第二行时,控件上的字符就会被截断。后面的字符就不会被显示出来了。

要实现WinForm中类似于WebApp的文本自动换行功能,你就必须手动编程设置控件的高度Height。在把控件添加进Form之前,应先获得控件控件显示文本的字数sumChar=Control.Text.Length,根据字数计算出需要多少行rowCount=(numChar/每行显示字数)+1 (注意:因为当不满一行时,(int)(numChar/每行显示字数)=0,因此必须再加一),那么控件的高度就是Control.Height=rowCount*每行文本的高度

在添加控件进Form之前,加入Control.Size = new Size (控件宽度,计算出来的控件高度)

OK。

应当注意的是,由于中英文以及各种符号的宽度不一致,所以每行显示的字数很难精确计算出来。可以根据显示内容以及经验,确定一个平均值,并且在完成之后多调试,最终确定一个合适的值。

-------------------------------------------------------------------------------

1.单行完全显示:Label.AutoSize = true;

2.换行显示:Label. AutoSize = false;(Label框高度用户指定)。

3.多行显示,并且根据字数自动控制高度:Label.AutoSize = true;Label.MaximumSize = new Size(w,0); 注:w:用户设定的宽度。

------------------------------------------------------

label自动换行的折衷方案:

核心关键在于利用TextBox的MultiLine自动换行功能,实现自动换行,其他就是颜色的设置、高度及所属窗体高度的自动调整。

采用TextBox来实现文字的自动换行,textBox背景色设置为:Control色,AutoSize = true;MultiLize = true;Height = 12;

每个字符占用的宽度大约是12;

然后添加以下代码:

           int LblNum = ConfStr.Length;                                             //TextBox内容长度
           int RowNum = (int) txtBoxSp.Width/12;                               //每行显示的字数(计算出来的)
           int RowHeight = 12;                                                             //每行的高度
           int ColNum = (LblNum - (LblNum / RowNum) * RowNum) == 0 ? (LblNum / RowNum) : (LblNum / RowNum) + 1;   //列数
            
           if(ColNum == 1)
           {
               this.Height = 278;                                                   //禁止窗体显示textBox;
               this.AutoSize = false;
           }
           else
           {
               txtBoxSp.AutoSize = true;                                         //设置AutoSize
               txtBoxSp.Height = RowHeight * ColNum;                   //设置显示高度
               this.Height = 303 + txtBoxSp.Height + 6;                  //实现窗体高度的自动调整
           }


[C语言系列]C# 过滤html,js,css代码 正则表达式  [C语言系列]C# DataGridView显示行号的两种方法
[C语言系列]C# 线程调用主线程中的控件  [电脑应用]c# winform 打包部署 自定义界面 或设置开机启动
[C语言系列]C# 和 Linux 时间戳转换  [C语言系列]C#实现 WebBrowser中新窗口打开链接用默认或者指定…
[C语言系列]C#全角和半角转换  [C语言系列]c#WebBrowser查找并选择文本
[C语言系列]C#中实现WebBrowser控件的HTML源代码读写  [C语言系列]C#替换字符串中子串
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    An error occurred on the server when processing the URL. Please contact the system administrator.

    If you are the system administrator please click here to find out more about this error.

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 QQ:543098146投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao 信息产业部ICP备案号:鄂ICP备11006601号

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台