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#