现在有一个richTextBox,boss要求不可以出现滚动条,既:随着内容的增加而增加richTextBox的高度,并且内容减少时如果到了设定高度就不回减。我现在基本功能已经实现了,但有时仍然会出现滚动条,请教有没有什么解决思路可以完成这个功能?

解决方案 »

  1.   

    我现在的代码是这样的:
            private int h;
            private int w;
            private int lineH;//行高
            private int line = 11;// 标准行数量
            private int midLine = 11;//中间变量line
            private int currentLine = 1;
            private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
            {
                 RichTextBox r = (RichTextBox)sender;
                currentLine = r.GetLineFromCharIndex(r.SelectionStart) + 1;
                this.Text = "line:"+line+",LinesLength:"+this.richTextBox1.Lines.Length.ToString()+",currentLine:"+currentLine;
               if (e.KeyData == Keys.Enter)
                {
                    //如果是最后一行的话,那么将他的高度自动增长一行
                    if (richTextBox1.Lines.Length >= line)
                    {
                        r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height + lineH);
                    }
                }
                else if (e.KeyData == Keys.Delete)
                {
                    if (richTextBox1.Lines.Length > line && currentLine != r.Lines.Length)//如果richtextbox总行数大于标准行数,且不是最后一行
                    {
                        r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH);
                        //e.Handled = true;
                    }
                }
                else if (e.KeyData == Keys.Back)
                {
                    if (richTextBox1.Lines.Length > line)//如果richtextbox总行数大于标准行数,
                    {
                        r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH);
                        //e.Handled = true;
                    }
                }
            }
      

  2.   

    this.richTextBox1.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
      

  3.   

    this.richTextBox1.ScrollBars = RichTextBoxScrollBars.None;
      

  4.   

    注意:随着内容的增加而增加richTextBox的高度
      

  5.   

    先设置
    richTextBox1.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
    然后用TextChanged事件,简单实现private int LineH = 17;           //行高 
    private int defaultHeight = 180;  //默认richTextBox1高度 
    private int line = 11;            // 标准行数量 private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        int currentlines = richTextBox3.Lines.Length;
        if (currentlines >= line)
        {
            richTextBox1.Height = LineH * currentlines;
        }
        else
        {
            richTextBox1.Height = defaultHeight;
        }
    }
      

  6.   

    写错了
    int currentlines = richTextBox3.Lines.Length; 
    改为
    int currentlines = richTextBox1.Lines.Length; 
      

  7.   

    我之前用的一个简单的方式, 就是用一个大容器, 里面放两个小容器, 上面的一个小容器 Dock 设为 top
    下面的一个容器设为 Full, 当不需要上面小容器的内容时, 只需设置: Visible 为 false 就OK了, 不需要写许何代码!
      

  8.   

    在设计界面richTextBox 属性scrollbars设为none 
    你是//如果是最后一行的话,那么将他的高度自动增长一行 的
    你已经设定好了` 根本不用改什么``结果是一样的
      

  9.   

    ref: 我现在基本功能已经实现了,但有时仍然会出现滚动条..
    ---------
    -_-!!! 你不是指你的自增自减功能已经完成了吗?
      

  10.   


     private int h; 
            private int w; 
            private int lineH;//行高 
            private int line = 11;// 标准行数量 
            private int midLine = 11;//中间变量line 
            private int currentLine = 1; 
            private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
            { 
                 RichTextBox r = (RichTextBox)sender; 
                currentLine = r.GetLineFromCharIndex(r.SelectionStart) + 1; 
                this.Text = "line:"+line+",LinesLength:"+this.richTextBox1.Lines.Length.ToString()+",currentLine:"+currentLine; 
               if (e.KeyData == Keys.Enter) 
                { 
                    //如果是最后一行的话,那么将他的高度自动增长一行 
                    if (richTextBox1.Lines.Length > = line) 
                    { 
                        r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height + lineH); 
                    } 
                } 
                else if (e.KeyData == Keys.Delete) 
                { 
                    if (richTextBox1.Lines.Length >  line && currentLine != r.Lines.Length)//如果richtextbox总行数大于标准行数,且不是最后一行 
                    { 
                        r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH); 
                        //e.Handled = true; 
                    } 
                } 
                else if (e.KeyData == Keys.Back) 
                { 
                    if (richTextBox1.Lines.Length >  line)//如果richtextbox总行数大于标准行数, 
                    { 
                        r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH); 
                        //e.Handled = true; 
                    } 
                } 
            }
      

  11.   

                else if (e.KeyData == Keys.Back) 
                { 
                    if (richTextBox1.Lines.Length >  line)//如果richtextbox总行数大于标准行数, 
                    { 
                        r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH); 
                        //e.Handled = true; 
                    } 
                } 
    -------------------------------------------------
    自己又测试了一下,关于退格键没有控制好,把scrollbars设置为none后,使用backspace键会使richTextBox的高度小于设置的标准高。不知道各位有什么好的见解。
      

  12.   

    重新计算高度阿
    ││博客空间:http://blog.csdn.net/lovingkiss
    ││资源下载:http://download.csdn.net/user/lovingkiss
    ││Email:loving-kiss@163.com [MSN也是这个]
    ││联系方式:Q66840199 项目、聊天、咨询、探讨、统统收费,呵呵......
    ╚---------------------------------------------------------------------------------------------------------ō*︻$▅▆▇◤ 
      

  13.   

    截止到现在,我把delete和backspace的控制放如keyup里,基本已经实现了之前的要求
    但是如果用户复制的文本里含有回车,即\n的话,我该如何让他等价实现回车的效果?
    -------------------------------------------------------------------------------------
            //控制richTextBox的高度自增高自减小
            private void Form1_Load(object sender, EventArgs e)
            {
                h = richTextBox1.Size.Height;
                w = richTextBox1.Size.Width;
                lineH = lineS==0?h:h/lineS;
                //this.richTextBox1.ScrollBars = RichTextBoxScrollBars.;
            }        private int h, w;//标准总行时的控件高和宽
            private int lineH;//标准行的行高
            private int lineS = 11;// 标准总行数量standard
            private int midLine = 11;//标准总行lineS的中间变量,主要起比较作用
            private int currentLine = 1;//设置当前行为第1行
            private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
            {
                RichTextBox r = (RichTextBox)sender;
                currentLine = r.GetLineFromCharIndex(r.SelectionStart) + 1;
                if (e.KeyData == Keys.Enter )
                {
                    //总行数超过了标准行(line)的数量后,那么将他的高度自动增长一行,-_-!!!这个已经实现!
                    if (r.Lines.Length >= lineS)
                    {
                        r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height + lineH);
                    }
                }
                //this.Text = "line:" + lineS + ",LinesLength:" + r.Lines.Length.ToString() + ",currentLine:" + currentLine + ",midLine" + midLine;            
           }        private void richTextBox1_KeyUp(object sender, KeyEventArgs e)
            {
                //释放键时发生
                RichTextBox r = (RichTextBox)sender;
                currentLine = r.GetLineFromCharIndex(r.SelectionStart) + 1;
                if (e.KeyData == Keys.Delete)
                {
                    //如果richtextbox总行数大于标准行数,且当前行不是最后一行,并且总行数要发生了变化(排除是在同一行按下delete的情况)
                    if (r.Lines.Length >= lineS && currentLine != r.Lines.Length && midLine != r.Lines.Length )//&& r.Height > h)
                    {
                        r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH);
                    }
                }
                else if (e.KeyData == Keys.Back)
                {
                    //如果richtextbox总行数大于标准行数,并且总行数要发生变化
                    if (r.Lines.Length >= lineS && midLine != r.Lines.Length )
                    {
                        r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH);
                    }
                }
                midLine = r.Lines.Length;
                this.Text = "lineS:" + lineS + ",LinesLength:" + r.Lines.Length + ",currentLine:" + currentLine + ",midLine" + midLine;            
            }
      

  14.   

    LZ 为什么不在 richTextBox1_TextChanged 里来做?