netlib.narod.ru | < Назад | Оглавление | Далее > |
С классом StringFormat мы впервые столкнулись в главе 3, где он служил для размещения текста в центре клиентской области. Два свойства StringFormat, которые влияют на выравнивание текста, показаны ниже:
Свойства StringFormat (выборочно)
Тип | Свойство | Доступ | Описание |
StringAlignment | Alignment | Чтение/запись | Выравнивание по горизонтали |
StringAlignment | LineAlignment | Чтение/запись | Выравнивание по вертикали |
Эти свойства имеют тип StringAlignment — перечисление, состоящее из трех членов.
Перечисление StringAlignment
Член | Значение | Описание |
Near | 0 | Обычно слева или вверху |
Center | 1 | Всегда по центру |
Far | 2 | Обычно справа или внизу |
Параметры выравнивания работают по-разному в зависимости от того, какой объект вы указываете при вызове метода DrawString: PointF или RectangleF. Сначала рассмотрим версию с RectangleF, Следующая программа использует прямоугольную клиентскую область в девяти вызовах DrawString, каждый из которых использует различную комбинацию свойств Alignment и LineAlignment. Чтобы было интереснее, текст, выводимый DrawString, содержит знак перевода каретки.
StringAlignmentRectangle.cs
//--------------------------------------------------------- // StringAlignmentRectangle.cs (C) 2001 by Charles Petzold //--------------------------------------------------------- using System; using System.Drawing; using System.Windows.Forms; class StringAlignmentRectangle: PrintableForm { public new static void Main() { Application.Run(new StringAlignmentRectangle()); } public StringAlignmentRectangle() { Text = "String Alignment (RectangleF in DrawString)"; } protected override void DoPage(Graphics grfx, Color clr, int cx, int cy) { Brush brush = new SolidBrush(clr); RectangleF rectf = new RectangleF(0, 0, cx, cy); string[] strAlign = { "Near", "Center", "Far" }; StringFormat strfmt = new StringFormat(); for (int iVert = 0; iVert < 3; iVert++) for (int iHorz = 0; iHorz < 3; iHorz++) { strfmt.LineAlignment = (StringAlignment)iVert; strfmt.Alignment = (StringAlignment)iHorz; grfx.DrawString( String.Format("LineAlignment = {0}\nAlignment = {1}", strAlign[iVert], strAlign[iHorz]), Font, brush, rectf, strfmt); } } }
Три возможных значения свойства Alignment соответствуют выравниванию текста по левому краю, по правому или по центру прямоугольника. Три возможных значения LineAlignment указывают, что текст выводится сверху, по центру или внизу прямоугольника:
Такой аккуратный, хорошо упорядоченный вид невозможен при использовании в методе DrawString объекта PointF, так как некоторые фрагменты будут перекрываться с другими. Вскоре мы это увидим.
При вызове метода DrawString следующая программа устанавливает объект PointF в центре клиентской области, но использует только четыре комбинации свойств Alignment и LineAlignment.
StringAlignmentPoint.cs
//----------------------------------------------------- // StringAlignmentPoint.cs (C) 2001 by Charles Petzold //----------------------------------------------------- using System; using System.Drawing; using System.Windows.Forms; class StringAlignmentPoint: PrintableForm { public new static void Main() { Application.Run(new StringAlignmentPoint()); } public StringAlignmentPoint() { Text = "String Alignment (PointF in DrawString)"; } protected override void DoPage(Graphics grfx, Color clr, int cx, int cy) { Brush brush = new SolidBrush(clr); Pen pen = new Pen(clr); string[] strAlign = { "Near", "Center", "Far" }; StringFormat strfmt = new StringFormat(); grfx.DrawLine(pen, 0, cy / 2, cx, cy / 2); grfx.DrawLine(pen, cx / 2, 0, cx / 2, cy); for (int iVert = 0; iVert < 3; iVert += 2) for (int iHorz = 0; iHorz < 3; iHorz += 2) { strfmt.LineAlignment = (StringAlignment)iVert; strfmt.Alignment = (StringAlignment)iHorz; grfx.DrawString( String.Format("LineAlignment = {0}\nAlignment = {1}", strAlign[iVert], strAlign[iHorz]), Font, brush, cx / 2, cy / 2, strfmt); } } }
Обратите внимание на две инструкции for. Переменные iVert и iHorz принимают только значения 0 и 2, и программа использует только четыре комбинации свойств Alignment и LineAlignment, чтобы вывести на монитор такое изображение:
Объект PointF, передаваемый методу DrawString, определяет центр клиентской области. DrawString размещает две строчки текста относительно этой точки в зависимости от значений свойств Alignment и LineAlignment.
Если заменить первую инструкцию for в этой программе на
for (int iVert = 1; iVert < 3; iVert += 2)
и перекомпилировать программу, то можно увидеть, как присваивание значения StringAlignment.Center свойству LineAlignment приводит к тому, что вертикальная координата, передаваемая DrawString, определяет положение центра текста. В данном случае это центр двух строчек текста по вертикали:
Если же вместо этого поменять вторую инструкцию for на
for (int iHorz = 1; iHorz < 3; iHorz += 2)
две строчки текста займут центральное положение по горизонтали:
Если изменить оба цикла for мы получим конечный вариант программы. Две строки текста будут отцентрованы по вертикали и горизонтали относительно центра клиентской области.
netlib.narod.ru | < Назад | Оглавление | Далее > |