可以改变文本行距(行间距)的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,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步