大家好!
     最近在做一个显示对话框,用的是C#Winform中的RichTextbox控件,现在碰到一个问题,RichTextBox不能根据内容自动调整高度,宽度自己设置。
以前失败的做法:
1 。this.RichTextBox.GetLineFromCharIndex(StrContent.Length)来获得行号,在乘上文本的字体高度就是当前RichTextBox的高度,没有达到想要的结果。
2.   rtb.CreateGraphics().MeasureString(StrContent, rtb.Font).Width / width;来获取文本的行数,结果也失败了。private void addRichTextBox(int x, int y,int width,int height,string context,bool isrtf)
        {
            RichTextBox rtb = new RichTextBox();
            rtb.Location = new System.Drawing.Point(x, y);
            //rtb.Name = "choose";
            rtb.Size = new System.Drawing.Size(width, height);
            rtb.BorderStyle = System.Windows.Forms.BorderStyle.None;
          
            if (!isrtf)
            {
                rtb.Text = context;
            }
            else
            {
                rtb.Rtf = context;
            }
            this.panel1.Controls.Add(rtb);
            
        }
这是动态添加RichTextBox的代码,我想要实现的是能根据传入的Context参数来设计RichTextBox的高度而不要显示垂直滚动条。
大家有没有什么好的方法?还有什么办法能够禁用panel的水平滚动条而只保留垂直滚动条,WinForm也是?

解决方案 »

  1.   

    如果是我来做的话,读取传入字符串的长度,除以每行字符得到一个大概的行数,把这个行数*字高配置为rb高度,rb.size = 
      

  2.   

    这个方法考虑过,就是前面说的rtb.CreateGraphics().MeasureString(StrContent, rtb.Font).Width ,这个就是获得传入字符串的宽度,在/上RichTextbox的宽度,这个可能是得到的行数,但是,实际在做的时候,却没有达到想要的效果。
      

  3.   

    这贴怎么没大牛来回答啊,楼主既然说二楼的方法不理想
    想没想过用word
    private void button1_Click(object sender, System.EventArgs e)
    {//保存为WORD文件
    if(this.richTextBox1.Text=="")
    return;
    if(this.saveFileDialog1.ShowDialog()==DialogResult.Cancel)
    return;
    string FileName=this.saveFileDialog1.FileName;
    if(FileName.Length<1)
    return;
    FileName+=".doc";
    try
    {
    Word.ApplicationClass MyWord=new Word.ApplicationClass(); 
    Word.Document MyDoc;
    Object Nothing=System.Reflection.Missing.Value; 
    MyDoc=MyWord.Documents.Add(ref Nothing,ref Nothing,ref Nothing,ref Nothing); 
    MyDoc.Paragraphs.Last.Range.Text=this.richTextBox1.Text; 
    object MyFileName=FileName;
    //将WordDoc文档对象的内容保存为DOC文档 
    MyDoc.SaveAs(ref MyFileName,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing); 
    //关闭WordDoc文档对象 
    MyDoc.Close(ref Nothing, ref Nothing, ref Nothing); 
    //关闭WordApp组件对象 
    MyWord.Quit(ref Nothing, ref Nothing, ref Nothing); 
    MessageBox.Show("WORD文件保存成功","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
    catch(Exception Err)
    {
    MessageBox.Show("WORD文件保存操作失败!"+Err.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
    }
      

  4.   

    保存到word每次只能保存到一条数据,而且每次都直接把word关闭了,不能直接达到预览的效果。但是,我现在要实现的是在winform中动态添加richtextbox来显示多个记录,这些记录可能包含rtf格式的数据。
      

  5.   

    帮你顶一把了,~~[align=center]***********************************************************
                       欢迎使用 CSDN 小秘书
                  CSDN 小秘书下载
    ***********************************************************[/align]
      

  6.   

    给这个richTextBox控件加一个客户端允许换行的事属性试试
    style="word-wrap:break-word;"
    这样的话,richTextbox里面的东西会自动换行的。
    然后呢,把是否有滚动条的属性设置为false试下
    至于不允许有滚动条的属性我忘记了。你自己找找看。
      

  7.   

    这个问题我前几天刚好解决了,,哈哈blog.csdn.net/happy09li/article/details/7444912richTextBox1.ScrollBars = RichTextBoxScrollBars.None;  private void richTextBox1_ContentsResized(object sender, ContentsResizedEventArgs e)
      {
      richTextBox1.Height = e.NewRectangle.Height+10;  }接分
      

  8.   


    上面掉了一句代码
    private void addRichTextBox(int x, int y,int width,int height,string context,bool isrtf)
      {
      RichTextBox rtb = new RichTextBox();
        
    rtb .ScrollBars = RichTextBoxScrollBars.None;
     rtb .ContentsResized += new ContentsResizedEventHandler(richTextBox_ContentsResized);

      rtb.Location = new System.Drawing.Point(x, y);
      //rtb.Name = "choose";
      rtb.Size = new System.Drawing.Size(width, height);
      rtb.BorderStyle = System.Windows.Forms.BorderStyle.None;
       
      if (!isrtf)
      {
      rtb.Text = context;
      }
      else
      {
      rtb.Rtf = context;
      }
      this.panel1.Controls.Add(rtb);
      }
      private void richTextBox1_ContentsResized(object sender, ContentsResizedEventArgs e)
      {
      richTextBox1.Height = e.NewRectangle.Height+10;  }