Единственное место я использовал Отражательный материал в C#, было в шаблонах "фабрика", где я создаю объекты (в моем случае, сетевых слушателях) на основе информации о конфигурационном файле. Конфигурационный файл предоставил местоположение блоков, название типов в них и любые дополнительные необходимые аргументы. Фабрика взяла этот материал и создала слушателей на основе этого.
Просто разделите строку на символы и нарисуйте каждый, добавив высоту строки вашего шрифта к переменной оси 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);
}
Здесь - пример проекта, который выполняет вертикальный текст. Также есть некоторые комментарии о выравнивании текста.
В этом примере вы можете использовать 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;
}
}
Если вы уже используете правую ограничивающую рамку, я бы написал функцию, которая просто вставляла символы "\ n".
Да, при использовании escape-символа \ n (новая строка) происходит принудительное отключение. Однако, если вы введете \ n в визуальном конструкторе, он поместит текст как \ n, думая, что вы имели в виду фактический обратный слеш пунктуации, а не escape-символ новой строки.