输入文本的时候由于东西太多我都是复制过来的
    在主页面显示的时候。由于一行显示不完我就把显示不完的部分隐藏起来只显示前10个文字。
  
   但是在输入的时候有半角字有全角的字。那在显示的时候就出现问题了。
   同样是很多的字需要隐藏的但是前面显示的有的是很少的几个有的是很多个 。
 怎么解决这个问题呢? function subjj(string2 as string)
if string2.length<12 then
else if string2.length=12
else if string2.length>12
string2=string2.substring(0,10) + "...."
end if
return string2
end function
经过这个函数截取的文字显示个数不一样很难看。。

解决方案 »

  1.   

    public static string CutString(string str, int length)
    {
      int i = 0, j = 0;
      foreach (char chr in str)
      {
        if ((int)chr > 127)
        {
          i += 2;
        }
        else
        {
          i++;
        }
        if (i > length)
        {
          str = str.Substring(0, j) + "…";
          break;
        }
        j++;
      }
      return str;
    }参考下。
      

  2.   

    Function subjj(str As String, length As Integer) As String
       Dim i As Integer = 0
       Dim j As Integer = 0
       Dim chr As Char
       For Each chr In  str
          If (int)chr > 127 Then
             i += 2
          Else
             i += 1
          End If
          If i > length Then
             str = str.Substring(0, j) + "…"
             Exit for
          End If
          j += 1
       Next chr
       Return str
    End Function
    我转成这样但是好象      If (int)chr > 127 Then   这句有问题。
    该怎么写啊。
      

  3.   

    我刚解决了这个问题看代码如下
    private void CNRNM_TextChanged(object sender, System.EventArgs e)
    {
    string str=CNRNM.Text.Trim();
    byte[] bytes=System.Text.Encoding.Default.GetBytes(str);
    int i=bytes.Length/str.Length;
    if(i==2)
    {
    if(str.Length>6){MessageBox.Show("全角为6位!");CNRNM.Text=str.Substring(0,6);}
    }
    else
    {
    if(str.Length>12){MessageBox.Show("半角为12位!");CNRNM.Text=str.Substring(0,12);}
    }
    }