C#含有汉字字符串格式操作带来了的对齐错位有关问题

C#含有汉字字符串格式操作带来了的对齐错位问题
本帖最后由 qq_27828157 于 2015-05-21 16:08:53 编辑
以下代码是对字符窜进行一下对齐操作,年月日时分秒对的是齐的,因为汉字数目固定,但是(MsgReceive[??] << 8) + MsgReceive[??]这段的汉子数目会有变化,有时会是空白。最后导致了在期望之外的输出结果:

EventRecordForm.TextBuffer = ((MsgReceive[89] << 8) + MsgReceive[90]).ToString().PadLeft(4) + "\t"
                                                  + ((MsgReceive[9] << 8) + MsgReceive[10]).ToString().PadLeft(4) + "年"
                                                  + ((MsgReceive[19] << 8) + MsgReceive[20]).ToString().PadLeft(2) + "月"
                                                  + ((MsgReceive[29] << 8) + MsgReceive[30]).ToString().PadLeft(2) + "日"
                                                  + ((MsgReceive[39] << 8) + MsgReceive[40]).ToString().PadLeft(2) + "时"
                                                  + ((MsgReceive[49] << 8) + MsgReceive[50]).ToString().PadLeft(2) + "分"
                                                  + ((MsgReceive[59] << 8) + MsgReceive[60]).ToString().PadLeft(2) + "秒"
                                                  + ((MsgReceive[69] << 8) + MsgReceive[70]).ToString().PadLeft(3) + "毫秒  " + "\t"
                                                  + Eventlist[(MsgReceive[79] << 8) + MsgReceive[80]].PadRight(20) + "\t"
                                                  + ((MsgReceive[99] << 8) + MsgReceive[100]).ToString().PadLeft(10) + Environment.NewLine

                                                  + ((MsgReceive[91] << 8) + MsgReceive[92]).ToString().PadLeft(4) + "\t"
                                                  + ((MsgReceive[11] << 8) + MsgReceive[12]).ToString().PadLeft(4) + "年"
                                                  + ((MsgReceive[21] << 8) + MsgReceive[22]).ToString().PadLeft(2) + "月"
                                                  + ((MsgReceive[31] << 8) + MsgReceive[32]).ToString().PadLeft(2) + "日"
                                                  + ((MsgReceive[41] << 8) + MsgReceive[42]).ToString().PadLeft(2) + "时"
                                                  + ((MsgReceive[51] << 8) + MsgReceive[52]).ToString().PadLeft(2) + "分"
                                                  + ((MsgReceive[61] << 8) + MsgReceive[62]).ToString().PadLeft(2) + "秒"
                                                  + ((MsgReceive[71] << 8) + MsgReceive[72]).ToString().PadLeft(3) + "毫秒  " + "\t"
                                                  + Eventlist[(MsgReceive[81] << 8) + MsgReceive[82]].PadRight(20) + "\t"
                                                  + ((MsgReceive[101] << 8) + MsgReceive[102]).ToString().PadLeft(10) + Environment.NewLine

                                                  + ((MsgReceive[93] << 8) + MsgReceive[94]).ToString().PadLeft(4) + "\t"
                                                  + ((MsgReceive[13] << 8) + MsgReceive[14]).ToString().PadLeft(4) + "年"
                                                  + ((MsgReceive[23] << 8) + MsgReceive[24]).ToString().PadLeft(2) + "月"
                                                  + ((MsgReceive[33] << 8) + MsgReceive[34]).ToString().PadLeft(2) + "日"
                                                  + ((MsgReceive[43] << 8) + MsgReceive[44]).ToString().PadLeft(2) + "时"
                                                  + ((MsgReceive[53] << 8) + MsgReceive[54]).ToString().PadLeft(2) + "分"
                                                  + ((MsgReceive[63] << 8) + MsgReceive[64]).ToString().PadLeft(2) + "秒"
                                                  + ((MsgReceive[73] << 8) + MsgReceive[74]).ToString().PadLeft(3) + "毫秒  " + "\t"
                                                  + Eventlist[(MsgReceive[83] << 8) + MsgReceive[84]].PadRight(20) + "\t"
                                                  + ((MsgReceive[103] << 8) + MsgReceive[104]).ToString().PadLeft(10) + Environment.NewLine

                                                  + ((MsgReceive[95] << 8) + MsgReceive[96]).ToString().PadLeft(4) + "\t"
                                                  + ((MsgReceive[15] << 8) + MsgReceive[16]).ToString().PadLeft(4) + "年"
                                                  + ((MsgReceive[25] << 8) + MsgReceive[26]).ToString().PadLeft(2) + "月"
                                                  + ((MsgReceive[35] << 8) + MsgReceive[36]).ToString().PadLeft(2) + "日"
                                                  + ((MsgReceive[45] << 8) + MsgReceive[46]).ToString().PadLeft(2) + "时"
                                                  + ((MsgReceive[55] << 8) + MsgReceive[56]).ToString().PadLeft(2) + "分"
                                                  + ((MsgReceive[65] << 8) + MsgReceive[66]).ToString().PadLeft(2) + "秒"
                                                  + ((MsgReceive[75] << 8) + MsgReceive[76]).ToString().PadLeft(3) + "毫秒  " + "\t"
                                                  + Eventlist[(MsgReceive[85] << 8) + MsgReceive[86]].PadRight(20) + "\t"
                                                  + ((MsgReceive[105] << 8) + MsgReceive[106]).ToString().PadLeft(10) + Environment.NewLine

                                                  + ((MsgReceive[97] << 8) + MsgReceive[98]).ToString().PadLeft(4) + "\t"
                                                  + ((MsgReceive[17] << 8) + MsgReceive[18]).ToString().PadLeft(4) + "年"
                                                  + ((MsgReceive[27] << 8) + MsgReceive[28]).ToString().PadLeft(2) + "月"
                                                  + ((MsgReceive[37] << 8) + MsgReceive[38]).ToString().PadLeft(2) + "日"
                                                  + ((MsgReceive[47] << 8) + MsgReceive[48]).ToString().PadLeft(2) + "时"
                                                  + ((MsgReceive[57] << 8) + MsgReceive[58]).ToString().PadLeft(2) + "分"
                                                  + ((MsgReceive[67] << 8) + MsgReceive[68]).ToString().PadLeft(2) + "秒"
                                                  + ((MsgReceive[77] << 8) + MsgReceive[78]).ToString().PadLeft(3) + "毫秒  " + "\t"
                                                  + Eventlist[(MsgReceive[87] << 8) + MsgReceive[88]].PadRight(20) + "\t"
                                                  + ((MsgReceive[107] << 8) + MsgReceive[108]).ToString().PadLeft(10) + Environment.NewLine;


C#含有汉字字符串格式操作带来了的对齐错位有关问题

可以看到,最右侧的数值并没有对齐。但是请注意图中的蓝色块,这是一个Tab键,从tab左边沿往左移动光标到第三列最左侧汉字的左边沿总计正好移动了20下光标(每一行都是如此);同样的从tab右边沿往右移动光标到数字右边沿总计正好移动了10下光标(每一行都是如此),两操作均分别符合了PadLeft,以及PadRight。

仔细观察还可以发现,第三列如果是三个汉字及其以下,则数字偏左,四个汉字及其以上,则数字偏右。

请教各位,你们是如何让汉字对齐?
------解决思路----------------------
计算字符长度 然后减去相应的占位符
------解决思路----------------------
http://blog.csdn.net/starfd/article/details/45895241
直接写了个扩展,你用我那个扩展替换你的PadRight就可以了
------解决思路----------------------
你的项目是2.0?那你把this去掉,然后按静态类的写法来用就可以了