我的代码
private void Form1_Load(object sender, EventArgs e)
        {
            string txt = "你好你好你好你好你好 0123456789012345678901234567890123456789012345678912";
            string txt2="";
            for (int i = 0; i <= txt.Length / 10; i++)
            {
                if (i == txt.Length / 10)
                {
                    txt2 += txt.Substring(i * 10, txt.Length-(i*10));
                }
                else
                {
                    txt2 += txt.Substring(i * 10, 10) + Environment.NewLine;
                }
            }
            label1.Text = txt2;
        }
应为txt太长了 在窗体上显示不全
所以我通过换行来解决但是这又遇到问题了
我做的10个字符换一行
但是C# 汉字也是一个字符
所以显示的效果就变成第一行显示10个汉字
第二行以后都显示10个字母
第一行就比后面的宽了一倍我想要的效果是第一行显示5个汉字
第二行在显示5个
以后的每行显示10个字母 这样每行的宽度就一样了

解决方案 »

  1.   

    有个比较笨的办法,字母符号数字等的asc码在0-256之间,判断下在处理就好了
      

  2.   

    不是UniCode编码的话可以数字节数
      

  3.   

     string txt = "你好你好你好你好你好0123456你0hao好好7890123456789你好01234567890123456789012345678912";
                string txt2 = "";
                int a = 0;
                for (int i = 0; i <txt.Length; i++)
                {
                    string str = txt.Substring(i, 1);
                    txt2 = txt2 + str;
                    if (Regex.IsMatch(str, @"^[\u4e00-\u9fa5],{0,}$"))
                    {
                        a += 2;
                    }
                    else
                    {
                        a += 1;
                    }
                    if (a % 10==0)
                    {
                        txt2 = txt2 + Environment.NewLine;
                    }
                }
                label1.Text = txt2;
      

  4.   

    设置标签的属性
    label1.AutoSize=false;
    至于Size可以定一个适合的大小,这样是自动换行的。
      

  5.   

    int i=System.Text.Encoding.Default.GetByteCount(txt);