有个紧急问题 求救下   
控件:listbox   我要一行显示数据
效果如下:
321321   苹果一个   32     2
123123   鸭梨1      2     3前2列左对齐  后2列右对齐  我用的是substring方法来判断 不足位补空格  但是中间那个名称有英文还有中文对齐字符数不一样   现在就是对不齐  有解决方案吗? 
究竟怎么达到这样的效果啊?    有简单算法的说下,或者有函数的直接告诉我下,我先说下 我碰到的问题  不足补空格的方法 因为汉字和数字组合的第2列没办法确定字符数   同时就算确定了   到substring的时候也不是按照获取的byte来确定长度  而是按照a.length()来确定的长度,所以得到的 参数也没办法用他来做
求高人    最好是原来碰到这个情况的人  在线等  有好办法的 直接就给分

解决方案 »

  1.   

    用ListView进行多列显示,随便设置各列的对齐方式
      

  2.   

    别的控件 不用说了  程序已经定型在listbox上了    要改就前功尽弃了   必须在listbox上弄 
    希望有提供有价值线索的人
      

  3.   

    String.PadRight()
    左对齐此字符串中的字符,在右边用空格填充以达到指定的总长度。命名空间:  System
    程序集:  mscorlib(在 mscorlib.dll 中)
      

  4.   

    winform or webform?
    你的数据是用什么存储的?DataTable?
    应该不是很难的,找到每一列的最长字符,然后每一列都填充空格就行了
      

  5.   

    private string getCountStr(string str,int count) 

    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 
    这样我看看啊    头疼
      

  6.   

    唉,这就是我们为什么需要有经验的管理者的原因,“前人作X,后人受苦”阿,如果要解决可以
    一、使用上面某位同志说的 [string].PadLeft() 或者 [string].PadRight(),但是,要使用等宽字体
    二、CreateGraphics 以后自己画字符串,但是考虑到需要换页的问题,虽然能够实现,但是实在是太麻烦了
    三、要不就只能自己在控件里面画控件了,用 WinAPI,同样麻烦另外,做完以后好好训斥一下当初决定使用这个控件的人(希望不是楼主,否则就惨了:-P)
      

  7.   

    弄出来了,楼主看看using System;
    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;
                }
            }
        }
    }