当前位置:编程学习 > C#/ASP.NET >>

这个错误怎么解决 "索引和长度必须引用该字符串内的位置"

  if (xbs.Length >58)
            {
                int a = 58;
                int b = 25;
                for (int i = 0; i <= 1000; i++)
                {

                    g.DrawString(xbs.Substring(a * i, a * (i + 1)), new Font("宋体", 10), Brushes.Black, fher + 80, fvar + 150 + (b * i), new StringFormat());
                }

            }
            else
            {
                g.DrawString(xbs, new Font("宋体", 10), Brushes.Black, fher + 80, fvar + 150, new StringFormat());
            } --------------------编程问答-------------------- xbs.Substring(a * i, a * (i + 1))

----------------------------------

按照循环的次数和循环变量i的取值,这个超出了字符串的长度范围了。 --------------------编程问答-------------------- i有必要取到1000么? --------------------编程问答-------------------- 我把i改了也是这样啊 --------------------编程问答--------------------
            if (xbs.Length > 58)
            {
                MessageBox.Show(xbs.Length.ToString());
                int a = 58;
                int b = 25;
                for (int i = 0; i <= 1000; i++)
                {

                    g.DrawString(xbs.Substring(a * i, a * (i + 1)), new Font("宋体", 10), Brushes.Black, fher + 80, fvar + 150 + (b * i), new StringFormat());
                }

            }
            else
            {
                g.DrawString(xbs, new Font("宋体", 10), Brushes.Black, fher + 80, fvar + 150, new StringFormat());
            }


把你的代码加上上面那句,你看看你xbs的长度是不是大于1000了 --------------------编程问答-------------------- MessageBox.Show(xbs.Length.ToString()); --------------------编程问答-------------------- 没有啊
是200 --------------------编程问答--------------------

   if(a*i+a*(i+1)<=xbs.Length)
                    g.DrawString(xbs.Substring(a * i, a * (i + 1)), new Font("宋体", 10), Brushes.Black, fher + 80, fvar + 150 + (b * i), new StringFormat()); 
--------------------编程问答--------------------
引用 6 楼 j_h_ok 的回复:
没有啊
是200


字符串长度只有200
你却
 g.DrawString(xbs.Substring(a * i, a * (i + 1)), 
取到1000之内的字符串.

--------------------编程问答--------------------

当i=0时
xbs.Substring(a * i, a * (i + 1)) 为xbs.Substring(0,58);
当i=1000时
xbs.Substring(a * i, a * (i + 1)) 为xbs.Substring(58000,580058);

你的xbs有这么长的么
--------------------编程问答-------------------- 因为那个字符串的长度没有固定的
到时候就是一个参数
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,