Как сделать отступы от края RichTextBox
до текста? Эти отступы должны быть всегда, так как текст по умолчанию находится слишком близко к краю RichTextBox
. Пример на картинке.
RichTextBox
не имеет такого свойства.
Быстрое решение может быть достигнуто путем помещения RichTextBox
в Panel
, которая имеет такое же свойство BackColor
, что и RichTextBox
(обычно Color.White
).
Затем установите свойство Dock
для RichTextBox
для заполнения и задайте через свойство Padding
контрола Panel
необходимый отступ.
Источник
Расширьте методы RichTextBox
:
public static class RichTextBoxExtensions
{
public static void SetInnerMargins(this TextBoxBase textBox, int left, int top, int right, int bottom)
{
var rect = textBox.GetFormattingRect();
var newRect = new Rectangle(left, top, rect.Width - left - right, rect.Height - top - bottom);
textBox.SetFormattingRect(newRect);
}
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public readonly int Left;
public readonly int Top;
public readonly int Right;
public readonly int Bottom;
private RECT(int left, int top, int right, int bottom)
{
Left = left;
Top = top;
Right = right;
Bottom = bottom;
}
public RECT(Rectangle r) : this(r.Left, r.Top, r.Right, r.Bottom)
{
}
}
[DllImport(@"User32.dll", EntryPoint = @"SendMessage", CharSet = CharSet.Auto)]
private static extern int SendMessageRefRect(IntPtr hWnd, uint msg, int wParam, ref RECT rect);
[DllImport(@"user32.dll", EntryPoint = @"SendMessage", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, ref Rectangle lParam);
private const int EmGetrect = 0xB2;
private const int EmSetrect = 0xB3;
private static void SetFormattingRect(this TextBoxBase textbox, Rectangle rect)
{
var rc = new RECT(rect);
SendMessageRefRect(textbox.Handle, EmSetrect, 0, ref rc);
}
private static Rectangle GetFormattingRect(this TextBoxBase textbox)
{
var rect = new Rectangle();
SendMessage(textbox.Handle, EmGetrect, (IntPtr)0, ref rect);
return rect;
}
}
Дальше в Form_Load
используйте добавленные методы:
private void Form1_Load(object sender, EventArgs e)
{
int m = 24; // m - margin
richTextBox1.SetInnerMargins(m, m, m, 0);
}
Оригинал ответа: https://stackoverflow.com/a/33542937/7099599
См. свойства SelectionIndent
, SelectionRightIndent
, SelectionHangingIndent
.
richTextBox1.SelectionIndent = 50;
Это обеспечит отступ в 50
пикселей для всего текста от левого края контрола.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем привет! Разрабатываю одну программу (с платной подпиской), хочу сделать так, чтобы программа брала все библиотеки с моего сервера (при...
Здравствуйте! Возникла проблема при рендеринге текста(TextRender) на связи(Connection) во время зуммирования
Здравствуйте! у меня есть 2 странички, одна с отсчетом времени (стоит счетчик), другая с контентомМне нужно чтобы страничка с СЧЕТЧИКОМ, КАЖДЫЙ...