如何设置winform中label的Text的行间距和字符间距

emanlee 2006-07-22 05:27:17
如果label中有几行文字,如何设置行行之间的间距呢?

这个问题我曾在
http://community.csdn.net/Expert/topic/4749/4749698.xml?temp=5.942935E-02
中问过,也参看过
http://community.csdn.net/Expert/topic/4693/4693484.xml?temp=.6089441
不过问题没有得到解决,因此另开贴寻求各位的帮助。谢谢!
...全文
3754 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
emanlee 2006-08-10
  • 打赏
  • 举报
回复 1
费了一番周折终于解决了,以下若有不当之处敬请各位指教,谢谢!
//////////////////////////////////////////////////////
///
///功能:可以改变文本行距(行间距)的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);
}
}
}
}
}
aSalt 2006-07-23
  • 打赏
  • 举报
回复
如果只是显示文字(没有任何事件),建议用Graphics.DrawString直接绘到窗体上.
Dong 2006-07-23
  • 打赏
  • 举报
回复
做一个控件,里面右几个label组成,怎么控制都好了。我就试过这样的
Knight94 2006-07-23
  • 打赏
  • 举报
回复
你自己去写一个com,来替代label。至于多行间距,你可以用Graphics.DrawString来实现。
emanlee 2006-07-22
  • 打赏
  • 举报
回复
up

111,075

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧