如何将溢出的文本写入图片框的下一行?
How can I write overflowed text to the next line in picturebox?
我正在向 PictureBox 绘画,但问题是我的绘画(文本)从 Picture Box 溢出。我怎样才能写到下一行?
private string idbul(string gelenid)
{
string id = gelenid;
string[] malzeme = id.Split(' ');
string mal_id = malzeme[0];
mal_id = mal_id.Replace(" ", "");
return mal_id;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
using (Font myFont = new Font("Arial", 8))
{
string id = idbul(comboBox1.Text);
string tanim = tanimbul(comboBox1.Text);
DateTime now = DateTime.Now;
string tarih = now.ToString("dd/MM/yyyy");
e.Graphics.DrawString("SKYLAB TEKNOLOJİ", myFont, Brushes.Black, new Point(2, 145));
e.Graphics.DrawString("ÜRÜN KODU: " + id, myFont, Brushes.Black, new Point(2, 160));
e.Graphics.DrawString("Tanım : " + tanim, myFont, Brushes.Black, new Point(2, 175));
e.Graphics.DrawString("Tarih : "+tarih, myFont, Brushes.Black, new Point(2, 190));
}
}
private string tanimbul(string p)
{
string id = p;
string[] malzeme = id.Split(' ');
malzeme[0] = "";
string mal_id = String.Join(" ", malzeme);
return mal_id;
}
字符串变量"tanim"可以是长文本,所以会溢出。从截图中可以看出问题所在。
截图:
在 DrawString 中,您可以指定边界矩形(有点像边距)参见 here
edit* 我仔细研究了一下,自动换行只发生在实际单词中,因为它不会在单词中间换行,只会在单词结尾和下一个单词开始之前单词。
您也可以尝试获取 tanim 的长度 (tanim.Length),如果它比适合您的盒子的长度长,则编写一个单独的 DrawString。
像这样:
if(tanim.Length>x)
{
drawstring("tanim : "+tanim.substring(0,x),font,brush,firstlinestart);
drawstring(tanim.substring(x),font,brush,secondlinestart);
}
其中 x 是您可以放入第一行的字符数。
1.Create visible = false` 的虚拟标签;
使用函数调整字体大小
private float scaleFont(Label lab, string txt)
{
lab.Text = txt;
var width = TextRenderer.MeasureText(lab.Text, lab.Font).Width;
while (this.Bounds.Width < width)
{
using (var font = new Font(lab.Font.FontFamily, lab.Font.Size - 0.5f, lab.Font.Style))
{
lab.Font = font;
width = TextRenderer.MeasureText(lab.Text, font).Width;
}
}
return lab.Font.Size;
}
这样使用
字符串 drawString = "your string here";
var fontSize = scaleFont(label1, drawString);
使用(字体 drawFont = 新字体("Arial",字体大小))
{
//你的其余代码
}
我正在向 PictureBox 绘画,但问题是我的绘画(文本)从 Picture Box 溢出。我怎样才能写到下一行?
private string idbul(string gelenid)
{
string id = gelenid;
string[] malzeme = id.Split(' ');
string mal_id = malzeme[0];
mal_id = mal_id.Replace(" ", "");
return mal_id;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
using (Font myFont = new Font("Arial", 8))
{
string id = idbul(comboBox1.Text);
string tanim = tanimbul(comboBox1.Text);
DateTime now = DateTime.Now;
string tarih = now.ToString("dd/MM/yyyy");
e.Graphics.DrawString("SKYLAB TEKNOLOJİ", myFont, Brushes.Black, new Point(2, 145));
e.Graphics.DrawString("ÜRÜN KODU: " + id, myFont, Brushes.Black, new Point(2, 160));
e.Graphics.DrawString("Tanım : " + tanim, myFont, Brushes.Black, new Point(2, 175));
e.Graphics.DrawString("Tarih : "+tarih, myFont, Brushes.Black, new Point(2, 190));
}
}
private string tanimbul(string p)
{
string id = p;
string[] malzeme = id.Split(' ');
malzeme[0] = "";
string mal_id = String.Join(" ", malzeme);
return mal_id;
}
字符串变量"tanim"可以是长文本,所以会溢出。从截图中可以看出问题所在。
截图:
在 DrawString 中,您可以指定边界矩形(有点像边距)参见 here
edit* 我仔细研究了一下,自动换行只发生在实际单词中,因为它不会在单词中间换行,只会在单词结尾和下一个单词开始之前单词。
您也可以尝试获取 tanim 的长度 (tanim.Length),如果它比适合您的盒子的长度长,则编写一个单独的 DrawString。
像这样:
if(tanim.Length>x)
{
drawstring("tanim : "+tanim.substring(0,x),font,brush,firstlinestart);
drawstring(tanim.substring(x),font,brush,secondlinestart);
}
其中 x 是您可以放入第一行的字符数。
1.Create visible = false` 的虚拟标签;
使用函数调整字体大小
private float scaleFont(Label lab, string txt) { lab.Text = txt; var width = TextRenderer.MeasureText(lab.Text, lab.Font).Width; while (this.Bounds.Width < width) { using (var font = new Font(lab.Font.FontFamily, lab.Font.Size - 0.5f, lab.Font.Style)) { lab.Font = font; width = TextRenderer.MeasureText(lab.Text, font).Width; } } return lab.Font.Size; }
这样使用
字符串 drawString = "your string here";
var fontSize = scaleFont(label1, drawString); 使用(字体 drawFont = 新字体("Arial",字体大小)) { //你的其余代码 }