可以改变文本行距(行间距)的Label
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | ////////////////////////////////////////////////////// /// ///功能:可以改变文本行距(行间距)的Label ///作者:emanlee ///用于:c# 2003,2005 ///时间:2006-8-10 /// ///////////////////////////////////////////////////// using System; using System.ComponentModel; using System.Collections.Generic; using System.Diagnostics; using System.Text; using System.Drawing; namespace compass.Common { public partial class myLabel : System.Windows.Forms.Label { int lineDistance = 5; //行间距 public int LineDistance { get { return lineDistance; } set { lineDistance = value; } } public myLabel() { InitializeComponent(); } public myLabel(IContainer container) { container.Add( this ); InitializeComponent(); } protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; String drawString = this .Text; Font drawFont = this .Font; SolidBrush drawBrush = new SolidBrush( this .ForeColor); SizeF textSize = g.MeasureString( this .Text, this .Font); //文本的矩形区域大小 int lineCount = Convert.ToInt16(textSize.Width / this .Width) + 1; //计算行数 this .Height = Convert.ToInt16((textSize.Height + lineDistance) * lineCount); //计算调整后的高度 this .AutoSize = false ; float x = 0.0F; float y = 0.0F; StringFormat drawFormat = new StringFormat(); int step = 1; lineCount = drawString.Length; //行数不超过总字符数目 for ( int i = 0; i < lineCount; i++) { //计算每行容纳的字符数目 int charCount; for (charCount = 0; charCount < drawString.Length; charCount++) { string subN = drawString.Substring(0, charCount); string subN1 = drawString.Substring(0, charCount + 1); if (g.MeasureString(subN, this .Font).Width <= this .Width && g.MeasureString(subN1, this .Font).Width > this .Width) { step = charCount; break ; } } string subStr; if (charCount == drawString.Length) //最后一行文本 { subStr = drawString; e.Graphics.DrawString(subStr, drawFont, drawBrush, x, Convert.ToInt16(textSize.Height * i) + i * LineDistance, drawFormat); break ; } else { subStr = drawString.Substring(0, step); //当前行文本 drawString = drawString.Substring(step); //剩余文本 e.Graphics.DrawString(subStr, drawFont, drawBrush, x, Convert.ToInt16(textSize.Height * i) + i * LineDistance, drawFormat); } } } } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)