Как я могу записать переполненный текст на следующую строку в картинке? - PullRequest
0 голосов
/ 21 января 2019

Я рисую в PictureBox, но проблема в том, что моя картина (текст) переполнена из графического блока.Как мне написать следующую строку?

    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" может быть длинным текстом, поэтому она переполняется.На скриншоте вы видите проблему.

Снимок экрана

Ответы [ 2 ]

0 голосов
/ 21 января 2019

1.Создайте фиктивную метку с 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;

}

используйте ее так, как надо

String drawString = "your string here";
var fontSize = scaleFont (label1, drawString);using (Font drawFont = new Font ("Arial", fontSize)) {// остальная часть вашего кода}

0 голосов
/ 21 января 2019

В DrawString вы можете указать ограничивающий прямоугольник (вид полей), см. здесь

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 - количество символов, которое вы можете поместить в первую строку.

...