高手进来接分.来者有份

xhdanny 2003-09-12 05:21:52
请教各位,如何实现TextBox的自动换行(wordwrap)功能.要求得到换行后每一行的文本.

我看了MSDN,上面只提到如何用Graphics的MeasureString方法得到当前字体及范围的文本行数及总字数,没有提到如何根据当前字体及范围得到自动换行后每一行的文本.

比如:
string s = "这是一个测试文本11111";

要求换行后形成以下结果
string []sl=
{
"这是一",
"个测试",
"文本11",
"111"
}
请注意,由于字宽不同,不能简单以字数来分行.


如果哪一位能帮我解决这个问题一定重分相酬.
...全文
33 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
jn_sly 2003-09-16
  • 打赏
  • 举报
回复
用richtextbox 行不行,判断字宽用uf8
_weiKun_ 2003-09-16
  • 打赏
  • 举报
回复
用正则表达式其实很简单。
wwwxuhong 2003-09-16
  • 打赏
  • 举报
回复
你所说的是中文字符与西文字符的字宽问题,一个中文字占两个西文字宽.只要判断该字符的AscII码是不是大于128就可以判断出该字符是不是中文字符了
tohen 2003-09-13
  • 打赏
  • 举报
回复
textBox1.Multiline = true;
textBox1.ScrollBars = ScrollBars.Vertical;
textBox1.AcceptsReturn = true;
textBox1.AcceptsTab = true;
textBox1.WordWrap = true;
ArLi2003 2003-09-13
  • 打赏
  • 举报
回复
奇怪的问题,如果内容是:

sring s = "这是一个A测试文本11111";

那楼主打算怎么排?

string []sl=
{
"这是一",
"个A测试",
"文本11",
"111"
}

还是

string []sl=
{
"这是一",
"个A测",
"试文本",
"11111"
}

先决定怎么办再出问题吧
xiaha3 2003-09-12
  • 打赏
  • 举报
回复
以上和你的要求有点不一样,但你可以根据上面的原理改一下
每一个temp就是一行
xiaha3 2003-09-12
  • 打赏
  • 举报
回复
如果你是用:textbox1.text=value;
这样的的话,重新写一个类代替TextBox;

using System;

namespace views
{
/// <summary>
///
/// </summary>
public class TextBoxa : System.Windows.Forms.TextBox
{
public TextBoxa()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
string alltemp="";
string temp="";
if(this.Multiline =true)
{
foreach(char a in this.Text )
{
if(e.Graphics .MeasureString (temp+a,this.Font ).Width >this.Width||a.ToString ()!= "/n" )

{
alltemp+="/n";
temp="";
}
temp+=a;
alltemp+=a;
}
this.Text =alltemp;
}
base.OnPaint (e);
}
}
}
changezhong 2003-09-12
  • 打赏
  • 举报
回复
学习学习,up
shengxiaokai 2003-09-12
  • 打赏
  • 举报
回复
厦门大学软件学院主页ASP原代码(完全开放)
http://218.193.48.48/explorer/soft/UMU/software.rar
你好好研究!!
看看效果:
http://218.193.48.48/software/
gou4 2003-09-12
  • 打赏
  • 举报
回复
学习ing ,有分吗?
xhdanny 2003-09-12
  • 打赏
  • 举报
回复
相同字体宽度并不一定相等.比如"测"与"1"并不相等
jjcccc 2003-09-12
  • 打赏
  • 举报
回复
请注意,由于字宽不同,不能简单以字数来分行.
==》不知道上句中“字宽”指什么意思?
其实,TextBox自动折行总是发生在一行文字被填满时发生,也就是说,每行文本字数一般应是相同的,除非每行的字体不一样,但它的像素宽还是一样的,也许还只能用字数来手工分行,才能达到你独特的效果。
xhdanny 2003-09-12
  • 打赏
  • 举报
回复
wkyjob(流星划過...) 你说的方法我试过了,没有用.不过还是谢谢关注
xhdanny 2003-09-12
  • 打赏
  • 举报
回复
我要换好行再输出到排版打印系统.所以换行操作必须由我完成.
wkyjob 2003-09-12
  • 打赏
  • 举报
回复
textBox1.Multiline = true;
textBox1.ScrollBars = ScrollBars.Vertical;
textBox1.AcceptsReturn = true;
textBox1.AcceptsTab = true;
textBox1.WordWrap = true;
  • 打赏
  • 举报
回复
没有这个必要吧,难道你不能确定在一个textbox中的固定字体??

反正在textbox中是可以自动换行的,得到的数据是一行,那就一行啦,有什么关系???
你输出时可以进行再换行嘛(如果还是输出到textbox,根本就不用处理呀)。

不知道要这种结果的理由。。
xhdanny 2003-09-12
  • 打赏
  • 举报
回复
我查看过运行态的对象了,Lines的文本中没有回车字符

cnhgj(戏子?我菜,故我存在) :这种换行方式就是自动换行的方式.
cnhgj 2003-09-12
  • 打赏
  • 举报
回复
我想你中间最好搞个标识符,然后分割一下比较好,这样很抽象,根本没法分啊,谁知道你想从哪里到哪里?
isonme 2003-09-12
  • 打赏
  • 举报
回复
up
顾君彦 2003-09-12
  • 打赏
  • 举报
回复
我记得是软回车.不是硬回车
加载更多回复(6)

110,499

社区成员

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

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

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