TextBox просто показывает однострочный или многострочный текст без параметров форматирования - он может иметь шрифт, но он применим к TextBox, а не к тексту, поэтому, насколько я знаю, у вас не может быть параметров абзаца, таких как межстрочный интервал
Моим первым предложением было бы использовать RichTextBox, но, опять же, RTF не имеет кода для межстрочного интервала, поэтому я считаю, что это также невозможно.
Так что мои последние предложениядолжен использовать нарисованный владельцем контроль.Это не должно быть слишком сложно с шрифтом фиксированной ширины - вы знаете, местоположение каждого символа (x*w, y*h)
, где x
и y
- индекс символа, а w
и h
- размер одногосимвол.
Редактировать: Думая об этом немного больше, это еще проще - просто разделить строку на линии и нарисовать каждую линию.
Вот простойконтроль, который делает именно это.При тестировании я обнаружил, что для Font = new Font(FontFamily.GenericMonospace, 10, FontStyle.Regular)
лучшее значение для Spacing
было -9
.
/// <summary>
/// Displays text allowing you to control the line spacing
/// </summary>
public class SpacedLabel : Control {
private string[] parts;
protected override void OnPaint(PaintEventArgs e) {
Graphics g = e.Graphics;
g.Clear(BackColor);
float lineHeight = g.MeasureString("X", Font).Height;
lineHeight += Spacing;
using (Brush brush = new SolidBrush(ForeColor)) {
for (int i = 0; i < parts.Length; i++) {
g.DrawString(parts[i], Font, brush, 0, i * lineHeight);
}
}
}
public override string Text {
get {
return base.Text;
}
set {
base.Text = value;
parts = (value ?? "").Replace("\r", "").Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
}
}
/// <summary>
/// Controls the change in spacing between lines.
/// </summary>
public float Spacing { get; set; }
}