winForm的。
是这样的,有一字符串,长度、行数都不一定(如:字符串中包含有换行符),要在一控件中显示,但显示的宽度不能超过400像素,如超过则换行。并且,还要调整控件的大小,使字符串在这一控件中正好显示完,周围没有剩余空间,也没不足。
最好有代码。
谢谢啦!!!!!!!!!
是这样的,有一字符串,长度、行数都不一定(如:字符串中包含有换行符),要在一控件中显示,但显示的宽度不能超过400像素,如超过则换行。并且,还要调整控件的大小,使字符串在这一控件中正好显示完,周围没有剩余空间,也没不足。
最好有代码。
谢谢啦!!!!!!!!!
解决方案 »
- 我刚C#入门,问大家一个问题。。。。
- C#中如何将一个正常的数组遍历操作改成指针访问方式?
- 请问在EXE工程里写的自定义控件,其他的EXE工程里能引用么?
- 请教GridView如何生成列数不能确定的模板列
- 请高手看看存储进程的问题!
- 调查一下,用VS2005开发WINFORM程序的多吗?感觉用它开发速度比较慢呀!
- 自定义控件时声明了一个属性Width,但是重载(override)Width时发生错误,请问怎么解决?谢谢
- 打包时遇到的简单问题
- C#+asp.net+treeview!帮忙啊.
- 困扰我两年的问题,怎样实时查看网页执行的进度?
- 如何判断一个页面中的多个checkbox 是否被选中
- 如何找到VS2005中的图标?
{
string str = this.richTextBox1.Text;
Size size = TextRenderer.MeasureText(str, this.Font, Size.Empty, TextFormatFlags.Left | TextFormatFlags.WordBreak); if (size.Width > 400)
{
size = new Size(400, size.Width * size.Height / 400);
}
Rectangle rect = new Rectangle(0, 0, size.Width, size.Height); this.panel1.Size = new Size(size.Width + 1, size.Height + 1); using (Graphics g = this.panel1.CreateGraphics())
{
TextRenderer.DrawText(g, str, this.Font, rect, SystemColors.WindowText, TextFormatFlags.Left| TextFormatFlags.WordBreak);
g.DrawRectangle(SystemPens.WindowText, rect);
}
}
DrawString是画字符串
{
if (g == null)
{
return;
}
SizeF size = g.MeasureString(control.Text, control.Font);
while (size.Width > control.Width)
{
float fontSize = control.Font.Size - 0.25f;
if (fontSize <= 0)
{
break;
}
control.Font = new Font(control.Font.Name, fontSize);
size = g.MeasureString(control.Text, control.Font);
}
}
这个是缩小字体直到TextBox能容下所有的文本的例子你可以先测量出一个字符(全角或者半角)的宽度,然后按照你所要的长度去截取相应的字符串,然后DrawString,然后换行,然后继续画
在画每个元素的时候,判断当前是否超过规定的宽度(具体办法就是先测量出一个字符的宽度,然后算长度),如果超过,则先DrawString一部分,剩下的换行在画,否则直接DrawString就可以了
--》
就是先算出一个字符,可以是全角也可以是半角,比如你最多400像素,就用400除以得到的值,就是能画出的最多字符数,截取字符串的时候要考虑全角半角混合
不能直接的SubString,而是应该根据Byte截取,并且要判断最后一位是全角还是半角,如果是半角没有问题,如果是全角就要舍去最后一个Byte,或者多取一个Byte
{
string str = this.richTextBox1.Text;
using (Graphics g = this.panel1.CreateGraphics())
{
StringFormat format = new StringFormat( StringFormatFlags.DisplayFormatControl| StringFormatFlags.FitBlackBox| StringFormatFlags.LineLimit| StringFormatFlags.MeasureTrailingSpaces);
Size size = g.MeasureString(str, this.Font,400, format).ToSize(); if (size.Width > 400)
{
size = new Size(400, size.Width * size.Height / 400);
}
Rectangle rect = new Rectangle(0, 0, size.Width, size.Height); this.panel1.Size = new Size(size.Width + 1, size.Height + 1);
g.Clear(this.panel1.BackColor);
g.DrawString(str, this.Font, SystemBrushes.WindowText, rect, format);
g.DrawRectangle(SystemPens.WindowText, rect);
}
}
方便的说
Regex r = new Regex("(\r\n)"); // Split on hyphens.
Size rowSize = new Size();
int row = 0;
string[] s = r.Split(str);
foreach (string lineString in s)
{
if (lineString!="\r\n")
{
rowSize = TextRenderer.MeasureText(lineString, this.Font);
if (rowSize.Width > 400)
{
row += rowSize.Width / 400 + 1;
}
else
{
row++;
}
}
}
textBox2.Size = new Size(400, (row+1) * rowSize.Height);
textBox2.Text = str;