首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

C#中如何设置多个字符串同样的宽度

2011-12-28 
C#中怎么设置多个字符串同样的宽度?我想让7个字符串3行3列的显示并左对齐,字符串长度不一,不足7个用空格不

C#中怎么设置多个字符串同样的宽度?
我想让7个字符串3行3列的显示并左对齐,字符串长度不一,不足7个用空格不足。
如:
111111   111111   111111
aaaa       显示并左对齐   aa
a
现在的问题是显示的时侯汉字的宽度跟英文字母的宽度不一致,导致显示的时侯无法左对齐。我现在的做法是:
                                System.Text.StringBuilder   sb   =   new   StringBuilder();
                               
                                for   (int   i   =   1;   i   <=   items.Count;   i++)
                                {
                                        if   (i   %   3   ==   0)
                                        {
                                                sb.Append(items[i-1]+ "\n ");
                                        }
                                        else
                                        {
                                                sb.Append(items[i-1].PadRight(7,   '   '));
                                        }
                                }
                                m_ApplyData   =   sb.ToString();
--------------------------------
有谁能帮帮我呢???

[解决办法]
使用格式化字符串,含义有点象 C 的 printf

StringBuilder sb = new StringBuilder();
sb.AppendFormat( "{0,-7} ", "123 ").AppendFormat( "{0,-7} ", "4567 ").AppendFormat( "{0,-7} ", "89 ").AppendLine();
// ...
[解决办法]
格式项语法
所有格式项都采用下面的形式。

{index[,alignment][:formatString]}

必须使用成对的大括号(“{”和“}”)。

格式项组件
格式项由下面的组件构成。

索引组件
强制“索引”组件(也叫参数说明符)是一个从 0 开始的数字,可标识值列表中对应的元素。也就是说,参数说明符为 0 的格式项格式化列表中的第一个值,参数说明符为 1 的格式项格式化列表中的第二个值,依次类推。

通过指定相同的参数说明符,多个格式项可以引用值列表中的同一个元素。例如,通过指定类似于“{0:X} {0:E} {0:N}”的源字符串,可以将同一个数值格式化为十六进制、科学表示法和数字格式。

每一个格式项都可以引用所有的参数。例如,如果有三个值,则可以通过指定类似于“{1} {0} {2}”的源字符串来格式化第二、第一和第三个值。格式项未引用的值会被忽略。如果参数说明符指定了超出值列表范围的项,将导致运行时异常。

对齐组件
可选的“对齐”组件是一个带符号的整数,指示首选的格式化字段宽度。如果“对齐”值小于格式化字符串的长度,“对齐”会被忽略,并且使用格式化字符串的长度作为字段宽度。如果“对齐”为正数,字段的格式化数据为右对齐;如果“对齐”为负数,字段的格式化数据为左对齐。如果需要填充,则使用空白。如果指定“对齐”,就需要使用逗号。



格式字符串组件
可选的“格式字符串”组件由标准或自定义格式说明符组成。如果不指定“格式字符串”,则使用常规(“G”)格式说明符。如果指定“格式说明符”,需要使用冒号。


更多信息,请在 MSDN 搜索 “复合格式化” 的主题,


[解决办法]
\n???楼主是在winform下应用?


System.Text.StringBuilder sb = new System.Text.StringBuilder();

int len = 0;

for (int i = 1; i <= items.Count; i++)
{
if (i % 3 == 0)
{
sb.Append(items[i - 1] + "\n ");
}
else
{
len = Encoding.Default.GetBytes(items[i - 1]).Length;
if (len < 14)
sb.Append(items[i - 1] + " ".PadRight(14 - len, ' '));
else
sb.Append(items[i - 1].PadRight(7, ' '));
}
}

m_ApplyData = sb.ToString();


每个字符串会不会多于7个字符,如果多于7个,即可能存在多于7个的汉字,如何处理,以上在else里还是按你原来的写法,并未做处理
[解决办法]
上面的方法我试过了,但存在汉字跟英文字母混合的时侯就无法左对齐。
因为汉字的宽度跟英文字符的宽度不同。
----------------
上面的方法考虑到了中英混合的情况,在单个字符串
汉字个数×2 + 字母个数 < 14
的情况下,是能够做到左对齐的

如果你的单个字符串不满足,或是无法保证满足以上条件,那应该如何做,需要你给出规则,否则单个字符串有100个,或者夸张点,有10000个汉字,你说该如何对齐?能做到吗??

热点排行