首页 > 代码库 > 自动换行的两种代码(C#)
自动换行的两种代码(C#)
最近有个需求,需要将C# winform中的listBox中的内容自动换行,
其实在用listBox前,已经用textBox实现了大部分功能,可惜最后还是有个焦点的问题,
就是textBox中的文字会自动被选中,也就是蓝背景,超难看,老板就说不行,所以改换ListBox来试一试
如大家所知,listBox的每一个item就是一条记录,而且默认是不会自动换行的,所以listBox才同时有垂直和水平的滚动条
百度和google一下后,网上给的思路大概是:限定一个长度,字符串超过长度的部分截取下来,添加到下一个item,这样就人为的实现了listBox的自动换行。
结合到我的需求中 字符串是包含空格的,所以我就想了两种思路
思路一:
1.把字符串分割成一个个单独的单词,然后像串珍珠链子一样,一个个的单词组装起来
2.如果长度没有超过给定长度则继续组装(这里用到join方法),
2.1.当超过给定长度时,把最后一个单词从列表中删掉,(并用中间变量保存下来,添加到下一行的开头,中间变量的初始值为空)
详细看代码:
1 /* 2 *字符串换行,考虑到空格,以及完整单词的情况 3 *@param inputStr 要换行的字符串 4 *@param textWidth 固定的长度,超过这个长度则进行换行 5 * 6 */ 7 public List<string> listBoxWordWrap(string inputStr, int textWidth) 8 { 9 List<string> tempList = new List<string>();//临时存放拼接字符串的列表10 List<string> lastList = new List<string>();//最终的数据11 int strLength = inputStr.Length;//获取要换行字符串的长度12 if (strLength > textWidth)13 {14 string[] listArray = inputStr.Split(‘ ‘);//先把字符串分割成一个个单词,后面再重新连接15 string joinStr = "";16 string theDeleteStr = "";//用来存放因为增加了它才超过固定长度的那个单词。17 for (int j = 0; j < listArray.Length; j++)18 {19 tempList.Add(listArray[j]);//把分割好的单词 一个个的往list里面添加20 joinStr = String.Join(" ",tempList.ToArray());//然后转化成字符串21 //每添加一个都跟固定长度比较一下,当小的时候,继续添加;如果大于的时候进入判断22 if (joinStr.Length > textWidth)23 {24 //因为大于了固定长度,所以把最后一个单词删掉,删掉后的字符串为一条完整的记录,25 int lastSpaceIndex = joinStr.LastIndexOf(" ");26 lastList.Add((theDeleteStr+" "+joinStr.Substring(0, lastSpaceIndex)).Trim());27 theDeleteStr = listArray[j];28 //刚好是最后一个的时候29 if (j == listArray.Length - 1)30 lastList.Add(theDeleteStr);31 32 tempList.Clear();//清空临时list33 }34 else if (j == listArray.Length - 1)//当遍历到结尾,剩下的当做最后一行35 {36 lastList.Add((theDeleteStr+" "+joinStr).Trim());37 tempList.Clear();38 }39 }40 }41 return lastList;42 }
思路二:
1.把字符串分割成一个个单独的单词,然后像串珍珠链子一样,一个个的单词组装起来
2.如果当前长度小于给定长度,但再多一个单词后,字符串的长度就大于给定长度,这样就能够确定换行处
详细看代码:
1 /* 2 *字符串换行,考虑到空格,以及完整单词的情况 3 *@param inputStr 要换行的字符串 4 *@param textWidth 固定的长度,超过这个长度则进行换行 5 * 6 */ 7 public List<string> listBoxWordWrap2(string inputStr, int textWidth) 8 { 9 List<string> list = new List<string>();10 List<string> lastList = new List<string>();11 string str = inputStr;12 int textWidth = 64;13 if (str != "" || str != null)14 {15 int strLength = str.Length;16 if (strLength > textWidth)17 {18 string[] listArray = str.Split(‘ ‘);//先把字符串分割成一个个单词,后面再重新连接19 string joinStr = "";//连接起来的字符串20 string nextStr = "";//再添加多一个元素的连接字符串21 for (int j = 0; j < listArray.Length; j++)22 {23 list.Add(listArray[j]);24 joinStr = String.Join(" ", list.ToArray());25 //通过 当前字符串比固定长度小,但下一个字符串比固定长度大来判断换行处26 if(joinStr.Length < textWidth && j < listArray.Length-1){27 list.Add(listArray[j+1]);28 nextStr = String.Join(" ",list.ToArray());29 if (nextStr.Length > textWidth)30 {31 lastList.Add(joinStr);32 list.Clear();33 }34 else35 list.Remove(listArray[j+1]);36 }37 else if (j == listArray.Length - 1)38 {39 lastList.Add(joinStr.Trim());40 list.Clear();41 }42 }43 44 }45 }46 return lastList;47 }
自动换行的两种代码(C#)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。