2009-10-05 2 views
4

Предпочтительно, используя объект Graphics, как вы нарисуете строку, чтобы символы по-прежнему были ориентированы в обычном порядке, но располагались вертикально?Рисование текста с вертикальной укладкой в ​​WinForms

+0

Как насчет выравнивания? по центру или другим? –

+0

Мне пришлось удалить изображение с вашего поста, потому что ImageShack удалил его и заменил его рекламой. См. Http://meta.stackexchange.com/q/263771/215468 для получения дополнительной информации. Если возможно, было бы здорово, если бы вы повторно загрузили их. Благодаря! – Undo

ответ

7

Просто разделить строку на символы и нарисовать каждый добавив высоту строки вашего шрифта в переменную Y-ось:

protected override void OnPaint(PaintEventArgs e) 
    { 
     float x = 10.0F; 
     float y = 10.0F; 

     string drawString = "123"; 

     using(SolidBrush brush = new SolidBrush(Color.Black)) 
     using (Font drawFont = new Font("Arial", 16)) 
     { 
      foreach (char c in drawString.ToCharArray()) 
      { 
       PointF p = new PointF(x, y); 
       e.Graphics.DrawString(c.ToString(), drawFont, brush, p); 

       y += drawFont.Height; 
      } 
     } 
     base.OnPaint(e); 
    } 
+0

Мне это нравится, потому что это позволяет вам легко настраивать высоту каждой буквы; однако в этом примере вы не используете кисть. В реальной жизни вы также должны визуализировать буфер при необходимости и просто копировать из буфера в OnPaint. – overslacked

+0

хорошая точка, я добавил удаление объекта – scottm

1

Если вы уже используете правую ограничительную рамку, я бы написал функцию, которая просто вводила «\ n».

0

Да, используя escape-символ \ n (новая строка), он будет подавлен. Однако, если вы введете \ n в визуальный конструктор, он поместит текст как \ n, думая, что вы имели в виду фактический символ обратной косой черты, а не escape-символ новой строки.

3

Here является примером проекта, который делает вертикальный текст. Также есть комментарии относительно выравнивания текста.

Из примера можно использовать StringAlignment.Center, чтобы центрировать символы и передать их последнему параметру вызова DrawString.

protected override void OnPaint(PaintEventArgs e) 
    { 
     float x = 10.0F; 
     float y = 10.0F; 
     Font drawFont = new Font("Arial", 16); 
     SolidBrush drawBrush = new SolidBrush(Color.Black); 
     StringFormat sf = new StringFormat(); 
     sf.Alignment = StringAlignment.Center; 
     foreach (char c in Text.ToCharArray()) 
     { 
      PointF p = new PointF(x, y); 
      e.Graphics.DrawString(c.ToString(), drawFont, drawBrush, p, sf); 
      y += drawFont.Height; 
     } 
    } 
+1

не знал, что вы можете указать выравнивание таким образом! – scottm

Смежные вопросы