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

RichTextBox根据内容自动调整高度

大家好!
     最近在做一个显示对话框,用的是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也是?
--------------------编程问答-------------------- 帮顶! --------------------编程问答-------------------- 如果是我来做的话,读取传入字符串的长度,除以每行字符得到一个大概的行数,把这个行数*字高配置为rb高度,rb.size = 。。。 --------------------编程问答-------------------- 这个方法考虑过,就是前面说的rtb.CreateGraphics().MeasureString(StrContent, rtb.Font).Width ,这个就是获得传入字符串的宽度,在/上RichTextbox的宽度,这个可能是得到的行数,但是,实际在做的时候,却没有达到想要的效果。 --------------------编程问答-------------------- 接点分 --------------------编程问答-------------------- 这贴怎么没大牛来回答啊,楼主既然说二楼的方法不理想
想没想过用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);
}
} --------------------编程问答-------------------- 保存到word每次只能保存到一条数据,而且每次都直接把word关闭了,不能直接达到预览的效果。但是,我现在要实现的是在winform中动态添加richtextbox来显示多个记录,这些记录可能包含rtf格式的数据。 --------------------编程问答-------------------- 怎么没有人来回答额
  自己顶起来 --------------------编程问答-------------------- 为什么要调整高度?有滚动条就够了嘛,再说了,显示器就那大,如果文很多,那不要超过显示器范围了? --------------------编程问答-------------------- 帮你顶一把了,~~[align=center]***********************************************************
                   欢迎使用 CSDN 小秘书
              CSDN 小秘书下载
***********************************************************[/align] --------------------编程问答-------------------- 给这个richTextBox控件加一个客户端允许换行的事属性试试
style="word-wrap:break-word;"
这样的话,richTextbox里面的东西会自动换行的。
然后呢,把是否有滚动条的属性设置为false试下
至于不允许有滚动条的属性我忘记了。你自己找找看。 --------------------编程问答-------------------- 楼主问题解决了没?大家都 在等结果呢? --------------------编程问答-------------------- 楼主问题解决了没?碰到同样问题了 --------------------编程问答-------------------- 遇到这个问题,居然2年都没有人来回答啊…… --------------------编程问答-------------------- 这个问题我前几天刚好解决了,,哈哈



blog.csdn.net/happy09li/article/details/7444912

richTextBox1.ScrollBars = RichTextBoxScrollBars.None;

  private void richTextBox1_ContentsResized(object sender, ContentsResizedEventArgs e)
  {
  richTextBox1.Height = e.NewRectangle.Height+10;

  }

接分 --------------------编程问答--------------------
上面掉了一句代码


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;

  } --------------------编程问答-------------------- 楼主不结贴啊,不厚道。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,