c# label 自定义行间距

label 添加 Paint 事件。用"\n" 段落换行

     private void label2_Paint(object sender, PaintEventArgs e){int LineDistance = 8;//行间距System.Windows.Forms.Label label = sender as System.Windows.Forms.Label;System.Drawing.Font drawFont = label.Font;label.AutoSize = false;SolidBrush drawBrush = new SolidBrush(label.ForeColor);Graphics g = e.Graphics;g.Clear(label.BackColor);StringFormat drawFormat = new StringFormat();    string[] arrDrawString = label.Text.Split(new char[] { '\n'});int height = 0;foreach (string str in arrDrawString){//文本的矩形区域大小SizeF textSize = g.MeasureString(str, label.Font);//计算行数int strLineCount = Convert.ToInt32(Math.Ceiling(textSize.Width / label.Width));height += Convert.ToInt16((textSize.Height + LineDistance) * strLineCount);}label.Height = height;   //计算调整后的高度float netTextPos_Y = 0;   // 下一行的位置foreach (string drawString in arrDrawString){bool drawText = false;int strLenght = 1;   // 长度int startIndex = 0;  // 开始位置for (int i = 0; i < drawString.Length; i++, strLenght++){string subN = drawString.Substring(startIndex, strLenght);if (startIndex + strLenght >= drawString.Length){drawText = true;}else{string subN1 = drawString.Substring(startIndex, strLenght + 1);if (g.MeasureString(subN, label.Font).Width <= label.Width && g.MeasureString(subN1, label.Font).Width > label.Width){drawText = true;}}if (drawText){drawText = false;strLenght = 0;startIndex = i + 1;SizeF textSize = g.MeasureString(subN, label.Font);e.Graphics.DrawString(subN, drawFont, drawBrush, 0, netTextPos_Y , drawFormat);netTextPos_Y = netTextPos_Y + textSize.Height + LineDistance;}}}}

效果图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/308107.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu22.04系统安装软件、显卡驱动、cuda、cudnn、pytorch

Ubuntu22.04系统安装软件、显卡驱动、cuda、cudnn、pytorch 安装 Nvidia 显卡驱动安装 CUDA安装 cuDNN安装 VSCode安装 Anaconda 并更换源在虚拟环境中安装 GPU 版本的 PyTorchReference 这篇博文主要介绍的是 Ubuntu22.04 系统中软件、显卡驱动、cuda、cudnn、pytorch 等软件和…

写在2023岁末:敏锐地审视量子计算的当下

本周&#xff0c;《IEEE Spectrum》刊登了一篇出色的文章&#xff0c;对量子计算&#xff08;QC&#xff09;的近期前景进行了深入探讨。 文章的目的并不是要给量子计算的前景泼冷水&#xff0c;而是要说明量子计算的前景还很遥远&#xff0c;并提醒读者量子计算的用例可能很窄…

系列三、Eurek集群简介

一、Eurek集群简介 1.1、原理图 1.2、微服务RPC远程调用的核心 微服务远程调用的核心是高可用&#xff0c;试想一下如果你的EurekaServer服务只有一个&#xff0c;如果某个时刻该服务不可用了&#xff0c;那么将会导致整个服务环境的不可用。所以需要搭建Eureka集群&#xff0…

OpenStack云计算(-) 简介与部署Keystone

一.OpenStack简介 什么是云计算:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务) 云计算所包含的几个层次服务&#xff1a; SaaS ( Software as a Service ) :把在线软件作…

信息安全管理

管什么 管理对象&#xff1a;包括人在内的信息相关资产 管理组成&#xff1a;人员、目标、规则、过程 为什么管 反映业务目标的保障 组织整体组成部分 信息安全技术的融合剂 预防&#xff0c;组织或减少事件发生 对内、对外管控 管理特点 攻击和防护严重不对称&#xf…

企业品牌推广在国外媒体投放的意义和作用何在?

海外广告投放是企业在国际市场推广的重要战略&#xff0c;具有多种形式&#xff0c;包括社交媒体广告、短视频广告、电视广告等。这些广告形式在传播信息、推动销售、塑造品牌形象等方面发挥着独特的作用。 其中软文发稿是一种注重叙事和信息传递的广告形式&#xff0c;对于企…

基于Freeswitch实现的Volte网视频通知应用

现在运营商的Volte网络已经很好的支持视频通话了&#xff0c;因此在原来的电话语音通知的基础上&#xff0c;可以更进一步实现视频的通知&#xff0c;让用户有更好的体验&#xff0c;本文就从技术角度&#xff0c;基于Freeswitch来实现此类应用&#xff08;本文假设读者已对Fre…

最新Jasmine博客模板:简洁美观的自适应Typecho主题

Jasmine是一个专为博客类网站设计的Typecho主题。它以简洁为基础&#xff0c;力求展现出精致而美观的风格。主题采用了响应式设计&#xff0c;即使在移动设备上也能提供良好的使用体验。此外&#xff0c;主题还进行了针对性的优化&#xff0c;包括SEO、夜间模式和代码高亮等方面…

Prometheus通过consul实现自动服务发现

环境,软件准备 本次演示环境&#xff0c;我是在虚拟机上安装 Linux 系统来执行操作&#xff0c;以下是安装的软件及版本&#xff1a; System: CentOS Linux release 7.6Docker: 24.0.5Prometheus: v2.37.6Consul: 1.6.1 注意&#xff1a;这里为了方便启动 Prometheus、Consul服…

【c/c++】指针例图基础详解

文章目录 指针变量内存指针详解例1例2练习&答案解析 指针变量内存 int main(){// 各类型变量占字节数printf("char: %d\n",sizeof(char)); // 1printf("short: %d\n",sizeof(short)); // 2printf("int: %d\n",sizeof(int)); // 4pri…

【Maven】linux部署maven

简介 最近学习hyperledger-fabric超级账本&#xff08;区块链&#xff09;&#xff0c;需要使用到java和maven&#xff0c;所以重新学习了一下如何部署maven&#xff0c;这里附上参考文档。在附上官方网站的下载地址&#xff1a;https://maven.apache.org/download.cgi。首先去…

WPF 显示气泡提示框

气泡提示框应用举例 有时候在我们开发的软件经常会遇到需要提示用户的地方&#xff0c;为了让用户更直观&#xff0c;快速了解提示信息&#xff0c;使用简洁、好看又方便的气泡提示框显得更加方便&#xff0c;更具人性化。如下面例子&#xff1a;(当用户未输入账号时&#xff0…