有个紧急问题 求救下
控件:listbox 我要一行显示数据
效果如下:
321321 苹果一个 32 2
123123 鸭梨1 2 3前2列左对齐 后2列右对齐 我用的是substring方法来判断 不足位补空格 但是中间那个名称有英文还有中文对齐字符数不一样 现在就是对不齐 有解决方案吗?
究竟怎么达到这样的效果啊? 有简单算法的说下,或者有函数的直接告诉我下,我先说下 我碰到的问题 不足补空格的方法 因为汉字和数字组合的第2列没办法确定字符数 同时就算确定了 到substring的时候也不是按照获取的byte来确定长度 而是按照a.length()来确定的长度,所以得到的 参数也没办法用他来做
求高人 最好是原来碰到这个情况的人 在线等 有好办法的 直接就给分
控件:listbox 我要一行显示数据
效果如下:
321321 苹果一个 32 2
123123 鸭梨1 2 3前2列左对齐 后2列右对齐 我用的是substring方法来判断 不足位补空格 但是中间那个名称有英文还有中文对齐字符数不一样 现在就是对不齐 有解决方案吗?
究竟怎么达到这样的效果啊? 有简单算法的说下,或者有函数的直接告诉我下,我先说下 我碰到的问题 不足补空格的方法 因为汉字和数字组合的第2列没办法确定字符数 同时就算确定了 到substring的时候也不是按照获取的byte来确定长度 而是按照a.length()来确定的长度,所以得到的 参数也没办法用他来做
求高人 最好是原来碰到这个情况的人 在线等 有好办法的 直接就给分
希望有提供有价值线索的人
左对齐此字符串中的字符,在右边用空格填充以达到指定的总长度。命名空间: System
程序集: mscorlib(在 mscorlib.dll 中)
你的数据是用什么存储的?DataTable?
应该不是很难的,找到每一列的最长字符,然后每一列都填充空格就行了
{
byte [] bwrite=Encoding.GetEncoding("GB2312").GetBytes(str.ToCharArray());
if(bwrite.Length>=count)
return Encoding.Default.GetString( bwrite,0,count);
else return Encoding.Default.GetString(bwrite);
}
上面的这个方法就可以获得一个字符串中相应的字节数的子串。 比如:
str1="这是一个好人吗?" ;
str2="abcdefghijklmn";
分别调用上述函数,
str1=getCountStr(str1,12);
str2=getCountStr(str2,12);
就会返回
str1的值为 这是一个好人
str2的值为 abcdefghijkl
这样我看看啊 头疼
一、使用上面某位同志说的 [string].PadLeft() 或者 [string].PadRight(),但是,要使用等宽字体
二、CreateGraphics 以后自己画字符串,但是考虑到需要换页的问题,虽然能够实现,但是实在是太麻烦了
三、要不就只能自己在控件里面画控件了,用 WinAPI,同样麻烦另外,做完以后好好训斥一下当初决定使用这个控件的人(希望不是楼主,否则就惨了:-P)
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
List<string> a1 = new List<string>();
a1.Add("321321"); a1.Add("123123");
List<string> a2 = new List<string>();
a2.Add("苹果一个3"); a2.Add("鸭梨1");
List<string> a3 = new List<string>();
a3.Add("32"); a3.Add("2");
List<string> a4 = new List<string>();
a4.Add("2"); a4.Add("3"); string f = string.Empty;
for (int i = 0; i < 2; i++)
{ f += string.Format("{0} {1} {2} {3}\n",
PadRight(a1[i], 10), PadRight(a2[i], 10), PadRight(a3[i], 4), PadRight(a4[i], 3));
}
textBox1.Text = f;
} private string PadRight(string instr, int len)
{
int size = Encoding.GetEncoding("gb2312").GetByteCount(instr);
if (size >= len)
{
return instr;
}
else
{
string f = instr + new string(' ', len - size);
return f;
}
}
}
}