如何实现整词换行?

liul17 2007-08-02 12:54:14
我通过GDI+实现了一个文本显示的东西,因为有一些特殊需求所以必须自己写,实现换行的代码如下:
private void Form2_Paint(object sender, PaintEventArgs e)
{
String str = "部分央企投资违规<通知>强调央企在进行非主业投资时,包括非主业性质的房地产、金,融、证券和保险业投资等,须及时向国资委报告(审核、备案)并报送有关材料和情况\n  该《通知》的签发日期是6月27日。此前的6月18日,中国银监会宣布对被中国核工业建设集团公司和中国海运(集团)公司挪用信贷资金的八家银行分支机构进行行政处罚。";
FontFamily ff = FontFamily.GenericSerif;
StringFormat sf = new StringFormat();

sf.Trimming = StringTrimming.Word;
e.Graphics.DrawString(str, new Font(ff, 8f), new SolidBrush(Color.Black), new RectangleF(5, 5, this.ClientSize.Width - 10, this.ClientSize.Height - 10), sf);
}
,但不能整词的换行,整词换行就是像Word一样,当一行显示不下时,遇到一个是一个字时直接换行,当遇一个词时,将整个词换到下一行.
请问该怎么实现?

我知道词的规则,我也试过自己控制换行(计算 x,y值一个词一个词的打印,判断窗体的width,当超过宽度时换行,但运行效率太低)
...全文
214 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2007-10-08
  • 打赏
  • 举报
回复
try
richtextbox
liuyun1987 2007-10-08
  • 打赏
  • 举报
回复
帮顶~
期待答案。。。
liul17 2007-10-08
  • 打赏
  • 举报
回复
问题还是没有解决,大家帮忙顶一下,希望有解决方法! 谢谢!~
Macosx 2007-08-02
  • 打赏
  • 举报
回复
Word有字典在支持吧 自己分词哪那么容易
xiaoku 2007-08-02
  • 打赏
  • 举报
回复
了解了解...帮忙up...
emptyness 2007-08-02
  • 打赏
  • 举报
回复
难.. 也许就只能按你自己说的那样做了..

获得窗口width,然后一个词一个词的组成字符串,获得字符串的长度大于width时,
就把最后一个词改成下一行打印...
4.13.0.130¶ 修改过滤器的默认配置,去掉了 encoding="gb2312" 4.13.0.129¶ 补充翻译了一条漏掉的快捷菜单项"显示搜索对话框(D)" 4.13.0.128¶ 增加了对英文的支持 4.12.0.127¶ 更新了热键控件,重新编译插件 4.11.0.126¶ 为了避免安装路径的差异问题,修改了make.bat,从注册表中提取VB6的路径 将热键设定及响应的功能提取到一个单独的HotkeyControl?项目中 引用新HotkeyControl?控件,并在本地添加一个代理类HotkeyProxy? 补充了类注释和模块注释 调整了检查版本的方式,增加对以何种方式检查的判断,在手动检查更新时忽略灵敏度设置 4.10.0.125¶ 增加自动升级灵敏度的设定 修改了没有激活工程时进行范围是当前工程的搜索提示错误的问题 4.9.0.124¶ 增加ICondInfo接口,此接口定义了需要使用的搜索条件,全局设定GlobalSetting?和条件快照ConditionSnap?都实现了该接口,此接口在TaskMgr?中用到,代替原先的大量Property Get语句 在搜索范围是当前工程的时候显示工程名称 修改了搜索范围是选定区域,且区域中包含汉字时会搜索不全的问题 修改了搜索范围是当前过程,过程为最后一行且无后续换行时,搜索不全的问题 4.8.0.123¶ 选中正则表达式时,将整词匹配选项替换为单行模式选项 增加对正则表达式单行模式搜索/替换的支持 尝试不关闭窗口的代码高亮方式 选中多行时自动将搜索范围切换至选中内容 在卸载插件时删除全局对象的引用 完美解决了定位时焦点显示的问题. 修改了VBA插件启动时提示下标越界的问题 更改了工程文件名和DLL文件名,去掉了开头的VB字母 修改了安装文件的文件名为VBEnhancedSearch_Setup.exe 代码预览的相关行数默认值修改为12 增加定位时将代码窗体最大化的选项 在搜索结果列表的右键菜单中,增加关闭全部页面的选项 修改了代码预览窗体的背景及关键字的颜色 4.7.0.120¶ 修改了点击关闭按钮关闭页面时出错的问题 修改了快速点击搜索按钮提示错误的问题 修改无页面时点击ESC提示错误的问题 修改无页面时未禁用关闭按钮的问题 修改vbalTabControl,在用BarEnabled?设置Enabled属性的时候同时设定CanClose?,防止用户在禁用时点击关闭按钮. 在弹出对话框之前进行菜单的状态更新操作,防止菜单项选中状态更新不及时. 为了提高效率,使用ByRef?传递使用频率较高函数的字符串参数 对齐升级提示对话框中的版本号 补充了一些注释 去掉了默认标签页 增加关闭其它页面的功能 将TabData?更名为Page 将LogClassInitialize?和LogClassTerminate?函数放入标准模块 增加ILib接口,此接口用于进行全局对象的构建和销毁,并修改所有本地全局对象的初始化机制. 为了提高执行效率,修改了vbalDTab6FES.ocx的源代码,增加可以快速批量设置所有Tab标签的可用属性BarEnabled? 从PageManager?分离出PageCollection?类,此类用于专门管理页面集合 修改了工具栏窗口创建的方式,将此操作合并到CreateObjects?函数中 点确定关闭选项窗口时如果过滤器字符串无变化,则不更新列表 修改滚动条重绘的方式为PostMessage? 修改了Tab控件的事件处理,结果窗口仅处理菜单相关事件,页面增减相关事件由PageManager?类处理 修改了分离PageCollection?类后需要调整的相关调用代码 对于Task对象的事件源更新操作都放在TabManager?类的TabChange?事件中

111,098

社区成员

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

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

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