c#(mobile) 绘制文字自动换行的实现
2017-01-13 15:22
2823 查看
问题描述:写一个自定义的控件,在使用Graphics.DrawString()方法时发现.NET Compact Framework不支持自动换行。
问题解决:自己写了一个方法实现自动换行,主要实现了以下情况的换行:1.文本长度超过指定宽度2.文本中包含回车换行 符 。相关代码如下:
///
/// 绘制文本自动换行(超出截断)
///
/// 绘图图面
/// 字体
/// 文本
/// 绘制范围
private void DrawStringWrap(Graphics graphic, Font font, string text, Rectangle recangle)
{
List textRows = GetStringRows(graphic, font, text, recangle.Width);
int rowHeight = (int)(Math.Ceiling(graphic.MeasureString(\”测试\”, font).Height));
问题解决:自己写了一个方法实现自动换行,主要实现了以下情况的换行:1.文本长度超过指定宽度2.文本中包含回车换行 符 。相关代码如下:
///
/// 绘制文本自动换行(超出截断)
///
/// 绘图图面
/// 字体
/// 文本
/// 绘制范围
private void DrawStringWrap(Graphics graphic, Font font, string text, Rectangle recangle)
{
List textRows = GetStringRows(graphic, font, text, recangle.Width);
int rowHeight = (int)(Math.Ceiling(graphic.MeasureString(\”测试\”, font).Height));
int maxRowCount = recangle.Height / rowHeight; int drawRowCount = (maxRowCount < textRows.Count) ? maxRowCount : textRows.Count; int top = (recangle.Height - rowHeight * drawRowCount) / 2; StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Center; for (int i = 0; i < drawRowCount; i++) { Rectangle fontRectanle = new Rectangle(recangle.Left, top + rowHeight * i, recangle.Width, rowHeight); graphic.DrawString(textRows, font, new SolidBrush(Color.Black), fontRectanle, sf); } } /// <summary> /// 将文本分行 /// </summary> /// <param name=\"graphic\">绘图图面</param> /// <param name=\"font\">字体</param> /// <param name=\"text\">文本</param> /// <param name=\"width\">行宽</param> /// <returns></returns> private List<string> GetStringRows(Graphics graphic, Font font, string text, int width) { int RowBeginIndex = 0; int rowEndIndex = 0; int textLength = text.Length; List<string> textRows = new List<string>(); for (int index = 0; index < textLength; index++) { rowEndIndex = index; if (index == textLength - 1) { textRows.Add(text.Substring(RowBeginIndex)); } else if (rowEndIndex + 1 < text.Length && text.Substring(rowEndIndex, 2) == \"\\r\\n\") { textRows.Add(text.Substring(RowBeginIndex, rowEndIndex - RowBeginIndex)); rowEndIndex=index += 2; RowBeginIndex = rowEndIndex; } else if (graphic.MeasureString(text.Substring(RowBeginIndex, rowEndIndex - RowBeginIndex + 1), font).Width > width) { textRows.Add(text.Substring(RowBeginIndex, rowEndIndex - RowBeginIndex)); RowBeginIndex = rowEndIndex; } } return textRows; }
相关文章推荐
- c#(mobile) 绘制文字自动换行的实现
- 折腾了一早上的C# WPF ListView+Grid 实现图片+文字 自动换行排列 类似Windows资源管理器效果
- CSS实现文字自动换行(兼容Firefox)
- css实现页面文字不换行、自动换行、强制换行
- css实现页面文字不换行、自动换行、强制换行
- 绘制在某个矩形区域内字符串自动多行换行的一个方法(c)语言实现
- 在C#代码中实现gridview不自动换行
- 【转载】C# WinForm中的Label实现自动换行
- 效控制C#中label输出文字的长度,自动换行
- Jtable重载绘制器,实现单元格自动换行和选中高亮
- div 长度固定 文字太长实现自动换行
- css实现页面文字不换行、自动换行、强制换行
- [转载]css实现页面文字不换行、自动换行、强制换行
- CSS实现文字自动换行(兼容Firefox)
- 效控制C#中label输出文字的长度,自动换行
- CSS实现文字自动换行(兼容IE和火狐)
- 重写java中JButton,实现图片下显示文字(根据图片宽度文字自动换行)
- C# windows mobile中实现控件的动态绘制与动态删除
- android bitmap绘制文字自动换行
- 在区域内绘制宽字符串多行自动换行的c语言实现方法