Label 的长度不是 自动调整的,如果内容太多的话后面就不要显示了!
怎样能做到!?

解决方案 »

  1.   

    你直接拖个label就是你要的效果阿。
    如果不是,你将label的AutoSize 设置为false
      

  2.   

    我想楼上的理解可能错了。
    搂主应该是想让Label的内容不自动换行,而不是自动改变大小。不过好像在Label成员中并没有直接提供禁止自动换行和maxlength的属性。
    如果想控制的,只能通过脚本了。首先计算label能显示的length,然后截取这部分显示出来。
    可以用substring 等函数。
      

  3.   

    可以用 Label.PreferredWidth 属性来计算文本的宽度,再与 Label.Width 属性比较来决定 Label.Text 要取多长。
      

  4.   

    获得Label显示的宽度,然后自己截取字符串长度好了
      

  5.   

    // 使用 Skyiv.Label 可以达到多于一行的内容自动截断的效果
    namespace Skyiv
    {
      class Label : System.Windows.Forms.Label
      {
        public Label()
        {
          BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;  // 为了说明标签的边界, 使用单线边框, 正式使用时可把该行去掉.
          TextAlign   = System.Drawing.ContentAlignment.MiddleLeft;    // System.Windows.Forms.Label的默认值是TopLeft.
        }    protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
          int charactersFitted, linesFilled;
          System.Drawing.SizeF sizef = new System.Drawing.SizeF(Width, FontHeight);
          System.Drawing.StringFormat stringf = new System.Drawing.StringFormat();
          e.Graphics.MeasureString(Text, Font, sizef, stringf, out charactersFitted, out linesFilled);
          Text = Text.Substring(0, charactersFitted);
          base.OnPaint(e);
        }
      }
    }namespace Test
    {
      using MyLabel = Skyiv.Label;
      using System.Windows.Forms;
      using System.Drawing;
      
      class Test : Form
      {
        Test()
        {
          MyLabel label1   = new MyLabel();                            
          label1.Parent    = this;                                     
          label1.Text      = "测试字符串,很长的!还不够长?";            
          label1.Width     = 120;                                      
          label1.Height    = 60;                                       
                                                                      
          MyLabel label2   = new MyLabel();                            
          label2.Parent    = this;                                     
          label2.Top       = 65;                                       
          label2.Width     = 50;                                       
          label2.Height    = 20;                                       
                                                                      
          MyLabel label3   = new MyLabel();                            
          label3.Parent    = this;                                     
          label3.Top       = 90;                                       
          label3.Width     = 155;                                      
          label3.Height    = 75;                                       
          label3.Text      = "测试字符串,很长的!还不够长?那就再来!";   
          label3.TextAlign = ContentAlignment.BottomRight;             
        }
      
        static void Main()
        {
          Application.Run(new Test());
        }
      }
    }
      

  6.   

    // Skyiv.Windows.Forms.Label 控件, 实现了 LineLimit、Wrap 属性
    namespace Skyiv.Windows.Forms
    {
      using System.Drawing;  class Label : System.Windows.Forms.Label
      {
        // 以下3个字段也可以用属性实现
        public new string Text      = string.Empty; // 文本
        public     bool   LineLimit = false;        // 是否仅显示完整的文本行
        public     bool   Wrap      = true;         // 文本是否自动换行    // 重绘控件
        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
          int chars, lines;
          SizeF             size = new SizeF(Width, Height);
          StringFormatFlags sff  = 0;
          if (LineLimit)    sff |= StringFormatFlags.LineLimit;
          if (!Wrap)        sff |= StringFormatFlags.NoWrap;
          StringFormat      sf   = new StringFormat(sff);
          e.Graphics.MeasureString(Text, Font, size, sf, out chars, out lines);
          base.Text              = Text.Substring(0, chars);
          base.OnPaint(e);
        }
      }
    }// 测试
    namespace Skyiv.Test
    {
      using Label = Skyiv.Windows.Forms.Label;
      using System.Windows.Forms;  class Test : Form
      {
        Test()
        {
          Text             = "测试字符串,很长的! 不够长? 那就再来!";      Label label1     = new Label();
          label1.Parent    = this;
          label1.Text      = Text;
          label1.Width     = 100;
          label1.Height    = 38;      Label label2     = new Label();
          label2.Parent    = this;
          label2.Text      = Text;
          label2.Top       = 40;
          label2.Width     = 100;
          label2.Height    = 38;
          label2.LineLimit = true;         // 仅显示完整的文本行      Label label3     = new Label();
          label3.Parent    = this;
          label3.Text      = Text;
          label3.Top       = 80;
          label3.Width     = 100;
          label3.Height    = 38;
          label3.Wrap      = false;        // 文本不自动换行      foreach (Control ctl in Controls)
          {
            if (ctl is System.Windows.Forms.Label)
            {
              ((System.Windows.Forms.Label)ctl).BorderStyle = BorderStyle.FixedSingle;
            }
          }
        }    static void Main()
        {
          Application.Run(new Test());
        }
      }
    }
      

  7.   

    // Skyiv.Windows.Forms.Label 控件, 实现了 LineLimit、Wrap 属性
    // SLabel.cs (C) air|skyiv.com Fri 2005.07.29
    namespace Skyiv.Windows.Forms
    {
      using System.Drawing;  class Label : System.Windows.Forms.Label
      {
        public new string Text      = string.Empty; // 文本
        public     bool   LineLimit = false;        // 是否仅显示完整的文本行
        public     bool   Wrap      = true;         // 文本是否自动换行    private string DisplayText(Graphics g)
        {
          StringFormat   sf              = new StringFormat();
          if (LineLimit) sf.FormatFlags |= StringFormatFlags.LineLimit;
          if (!Wrap)     sf.FormatFlags |= StringFormatFlags.NoWrap;
          switch (TextAlign)
          {
            case ContentAlignment.TopLeft      :
              sf.LineAlignment = StringAlignment.Near  ;
              sf.Alignment     = StringAlignment.Near  ;
              break;
            case ContentAlignment.TopCenter    :
              sf.LineAlignment = StringAlignment.Near  ;
              sf.Alignment     = StringAlignment.Center;
              break;
            case ContentAlignment.TopRight     :
              sf.LineAlignment = StringAlignment.Near  ;
              sf.Alignment     = StringAlignment.Far   ;
              break;
            case ContentAlignment.MiddleLeft   :
              sf.LineAlignment = StringAlignment.Center;
              sf.Alignment     = StringAlignment.Near  ;
              break;
            case ContentAlignment.MiddleCenter :
              sf.LineAlignment = StringAlignment.Center;
              sf.Alignment     = StringAlignment.Center;
              break;
            case ContentAlignment.MiddleRight  :
              sf.LineAlignment = StringAlignment.Center;
              sf.Alignment     = StringAlignment.Far   ;
              break;
            case ContentAlignment.BottomLeft   :
              sf.LineAlignment = StringAlignment.Far   ;
              sf.Alignment     = StringAlignment.Near  ;
              break;
            case ContentAlignment.BottomCenter :
              sf.LineAlignment = StringAlignment.Far   ;
              sf.Alignment     = StringAlignment.Center;
              break;
            case ContentAlignment.BottomRight  :
              sf.LineAlignment = StringAlignment.Far   ;
              sf.Alignment     = StringAlignment.Far   ;
              break;
          }
          int chars, lines;
          g.MeasureString(Text, Font, ClientSize, sf, out chars, out lines);
          return Text.Substring(0, chars);
        }    protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
          base.Text = (Wrap && !LineLimit) ? Text : DisplayText(e.Graphics);
          base.OnPaint(e);
        }
      }
    }
      

  8.   

    cliff1002(不得不) 理解的是对的!
    可是汉字和英文字母 所占的像素不一样?
    我怎么判断字符长度和label的宽度!?
      

  9.   

    label纵向宽度调小一点就看不出换行拉
      

  10.   

    wuyi8808(air|skyiv.com)的代码很好啊,学习中!!!
      

  11.   

    哥们,自己重写一个Label吧!!!!