Задать отступы в RichTextBox
Как сделать отступы от края RichTextBox до текста? Эти отступы должны быть всегда, так как текст по умолчанию находится слишком близко к краю RichTextBox . Пример на картинке.

![]()
RichTextBox не имеет такого свойства.
Быстрое решение может быть достигнуто путем помещения RichTextBox в Panel , которая имеет такое же свойство BackColor , что и RichTextBox (обычно Color.White ).
Затем установите свойство Dock для RichTextBox для заполнения и задайте через свойство Padding контрола Panel необходимый отступ.
![]()
Расширьте методы RichTextBox :
Дальше в Form_Load используйте добавленные методы:
См. свойства SelectionIndent , SelectionRightIndent , SelectionHangingIndent .
Это обеспечит отступ в 50 пикселей для всего текста от левого края контрола.
1.8 – Пробельные символы и базовое форматирование кода
Пробельный символ – это термин, обозначающий символы, которые используются для форматирования. В C++ это в первую очередь относится к пробелам, табуляциям и символам новой строки. Компилятор C++ обычно игнорирует пробелы, за некоторыми незначительными исключениями (при обработке текстовых литералов). По этой причине мы говорим, что C++ – это язык, не зависящий от пробелов.
Следовательно, все следующие выражения делают одно и то же:
Даже последнее выражение, разбитое на две строки, компилируется нормально.
Следующие функции выполняют одно и то же:
Одно исключение, когда компилятор C++ обращает на них внимание, это, когда пробельные символы находятся внутри текста в кавычках, например "Hello world!" .
и каждый из них распечатывается именно так, как вы ожидали.
В тексте, заключенном в кавычки, переносы на новую строку не допускаются:
Фрагменты текста в кавычках, разделенные только пробельными символами (пробелы, табуляции или новые строки), будут объединены:
Другое исключение, когда компилятор C++ обращает внимание на пробелы, – это комментарии с // . Однострочные комментарии продолжаются только до конца строки. Таким образом, если вы сделаете что-то вроде этого, у вас возникнут проблемы:
Базовое форматирование
В отличие от некоторых других языков, C++ не накладывает на форматирование для программиста никаких ограничений (помните, доверяйте программисту!). На протяжении многих лет было разработано множество различных методов форматирования программ на C++, и вы обнаружите разногласия по поводу того, какие из них лучше. Наше основное эмпирическое правило состоит в том, что лучшие стили – это те, которые создают наиболее читаемый код и обеспечивают наибольшую последовательность.
Ниже приведены наши рекомендации по базовому форматированию:
1) Для отступов можно использовать табуляцию или пробелы (в большинстве IDE есть параметр, позволяющий преобразовать нажатие табуляции в соответствующее количество пробелов). Разработчики, которые предпочитают пробелы, как правило, делают это, потому что пробелы делают форматирование самоописывающим – код, разделенный пробелами, всегда будет выглядеть правильно, независимо от редактора. Сторонники использования табуляций задаются вопросом, почему бы вам для отступов не использовать символ, предназначенный для создания отступов, тем более что вы можете установить ширину по своему усмотрению. Здесь нет правильного ответа – и спорить об этом всё равно, что спорить, что лучше – торт или пирог. В конечном итоге всё сводится к личным предпочтениям.
В любом случае мы рекомендуем вам установить для табуляций значение отступа в 4 пробела. Некоторые IDE по умолчанию используют отступ в 3 пробела, что тоже нормально.
2) Есть два приемлемых стиля для фигурных скобок.
Руководство по стилю Google C++ рекомендует ставить открывающую фигурную скобку в той же строке, что и выражение:
Обоснованием этого является то, что это уменьшает количество вертикальных пробельных символов (вы не посвящаете всю строку ничему, кроме открывающей фигурной скобки), поэтому вы можете разместить больше кода на экране. Больше кода на экране упрощает понимание программы.
Однако мы предпочитаем распространенный вариант, когда открывающая фигурная скобка располагается в отдельной строке:
Это улучшает читаемость и снижает вероятность ошибок, поскольку пары скобок всегда должны иметь один и тот же отступ. Если вы получаете ошибку компилятора из-за несоответствия скобок, очень легко увидеть, где именно допущена ошибка.
3) Каждое выражение в фигурных скобках должно начинаться на одну табуляцию дальше от открывающей фигурной скобки функции, которой оно принадлежит. Например:
4) Строки не должны быть слишком длинными. Как правило, максимальная длина строки составляет 80 символов. Если строка будет длиннее, ее следует разделить (в разумном месте) на несколько строк. Это можно сделать, добавив к каждой последующей строке дополнительную табуляцию, или, если строки похожи, выровняв ее по строке выше (в зависимости от того, что легче читается).
Это облегчает чтение ваших строк. На современных широкоэкранных мониторах он также позволяет разместить два окна с похожим кодом рядом, что упрощает их сравнение.
Лучшая практика
Длина ваших строк не должна превышать 80 символов.
5) Если длинная строка разделена оператором (например, << или + ), оператор должен быть помещен в начало следующей строки, а не в конец текущей строки.
Это помогает прояснить, что последующие строки являются продолжением предыдущих строк, и позволяет выровнять операторы слева, что упрощает чтение.
6) Используйте пробельные символы, чтобы облегчить чтение кода, выравнивая значения и комментарии и добавляя интервалы между блоками кода.
Следующий код читать сложнее:
А этот код читать легче:
Мы будем следовать этим соглашениям на протяжении всех уроков, и они станут вашей второй натурой. По мере того, как мы представляем вам новые темы, мы будем предлагать новые рекомендации по стилю оформления для этого нового функционала.
В конечном итоге C++ дает вам возможность выбрать тот стиль, который вам больше всего подходит, или который вы считаете лучшим. Однако мы настоятельно рекомендуем вам использовать тот же стиль, который используем мы в наших примерах. Он был протестирован тысячами программистов над миллиардами строк кода и оптимизирован для достижения успеха. Одно исключение: если вы работаете с чужим кодом, перенимайте его стили. Лучше отдать предпочтение последовательности, чем вашим предпочтениям.
Автоматическое форматирование
Большинство современных IDE помогут вам отформатировать код по мере его ввода (например, когда вы создаете функцию, IDE автоматически делает отступы для выражений внутри тела функции).
Однако когда вы добавляете или удаляете код, или изменяете форматирование IDE по умолчанию, или вставляете блок кода с другим форматированием, форматирование может испортиться. Исправление форматирования для фрагмента или всего файла может вызывать головную боль. К счастью, современные IDE обычно содержат функцию автоматического форматирования, которая переформатирует либо выделенный фрагмент (выделенный мышью), либо весь файл.
Для пользователей Visual Studio
В Visual Studio параметры автоматического форматирования можно найти в меню Правка (Edit) → Дополнительно (Advanced) → Форматировать документ (Format Document) и Правка (Edit) → Дополнительно (Advanced) → Форматировать выделенный фрагмент (Format Selection).
Для пользователей Code::Blocks
В Code::Blocks параметры автоматического форматирования можно найти в меню клик правой кнопкой мыши в любом месте редактора → Format use AStyle (Форматировать с использованием AStyle).
Для облегчения доступа к этим функциям мы рекомендуем добавить сочетание клавиш для автоматического форматирования активного файла.
Лучшая практика
Для сохранения единообразия стиля форматирования кода настоятельно рекомендуется использовать функцию автоматического форматирования.
Отступ абзаца с помощью cout
Учитывая строку неизвестной длины, как вы можете вывести ее с помощью cout, чтобы вся строка отображалась на консоли в виде блока текста с отступом? (так что даже если строка переносится на новую строку, вторая строка будет иметь такой же уровень отступа)
И желаемый вывод:
Это короткая строка без отступа.
Изменить: домашнее задание, над которым я работаю, выполнено. Назначение не имеет ничего общего с форматированием вывода, как в приведенном выше примере, поэтому мне, вероятно, не следовало включать тег домашнего задания. Это просто для моего просветления.
Я знаю, что могу пересчитать символы в строке, увидеть, когда я дойду до конца строки, затем выплевывать новую строку и каждый раз выводить -x- количество пробелов. Мне интересно узнать, есть ли более простой идиоматический способ C ++ для выполнения вышеуказанного.
5 ответов
Вот несколько решений, которые сработают, если вы захотите выбросить любой кратный интервал и / или другие пробелы между словами.
Первый подход, который является наиболее простым, состоит в том, чтобы прочитать текст в istringstream и извлечь слова из потока. Перед печатью каждого слова проверьте, уместится ли оно в текущей строке, и напечатайте новую строку, если не поместится. Эта конкретная реализация не будет правильно обрабатывать слова, длина которых превышает максимальную длину строки, но ее нетрудно изменить для разделения длинных слов.
Второй, более «продвинутый» вариант — написать собственный ostream_iterator , который форматирует строки так, как вы ожидаете от них. Я назвал это ff_ostream_iterator от «забавного форматирования», но вы можете назвать его как-нибудь более подходящим, если хотите его использовать. Эта реализация правильно разбивает длинные слова.
Хотя реализация итератора немного сложна, использование довольно простое:
Фактическая реализация итератора выглядит следующим образом:
[Если вы скопируете и вставите этот фрагмент кода и main сверху, он должен скомпилироваться и запуститься, если ваш компилятор поддерживает C ++ 0x std::shared_ptr ; вы можете заменить это на boost::shared_ptr или std::tr1::shared_ptr , если ваш компилятор еще не поддерживает C ++ 0x.]
Этот подход немного сложен, потому что итераторы должны быть копируемыми, и мы должны быть уверены, что любой оставшийся в буфере текст печатается только один раз. Мы делаем это, полагаясь на тот факт, что каждый раз, когда итератор вывода записывается, любые его копии больше не могут использоваться.
Хороший стиль программирования
Один из признаков хорошего стиля программирования — последовательность — чем меньше сюрпризов, тем лучше. Последовательность позволяет легче читать программу, в первую очередь за счет сокращения отвлечений. Она также направляет глаза читателя, например, последовательность в расположении функции или подключении файлов упрощает их нахождение в будущем. Также она позволяет легче решать проблемы стиля, помогая читателю легче привыкнуть к нему.
Ясность кода
Хороший стиль нужен для того, чтобы ваша программа была ясна и понятна, а также легко изменяемая. Если сомневаетесь, выберете наиболее понятную методику для проблемы. Помните, что все, что вы пишите, вам, вероятно, придется перечитывать. Облегчите себе будущее и вносите ясность сразу.
Пробелы и форматирование
Пробелы могут уменьшить нагрузку на глаза читателя. Поскольку компилятор игнорирует пробелы, вы можете свободно размещать их в любом месте и форматировать код пробелами как хотите. Если вы делаете это с умом, это будет полезно.
Пробелы используются для форматирования отступов, пространства вокруг операторов, подписи функций и размещения аргументов функций. Конечно, это не все случая, где используются пробелы, но это должно дать вам представление о местах, где пробелы могут быть использованы для улучшения читабельности.
Отступ
Если вы еще не делаете отступов в вашем коде, то скоро начнете. Это просто необходимо, потому что это поможет вам быстро находить нужные управляющие строки кода или найти ошибки в нем. Вам следует делать отступы в каждом блоке кода:
Стили скобок
Есть множество способов для отступа в коде, и многие из них зависят от того, где вы разместите скобки. Некоторые люди предпочитают стиль, используемый выше. Некоторые люди предпочитают стиль, показанный ниже:
Есть и другие стили:
Какой стиль скобок вы выберете зависит от вас, хотя я рекомендую использовать одинаковый стиль скобок всем, кто работает над одним проектом. Во всяком случае, есть аргументы для каждого стиля. Хорошо использовать такой стиль скобок, который позволяет разместить максимальное количество кода на экране, однако последовательность так же важна.
Ширина отступа
Насколько вы собираетесь отступать — это вопрос личных предпочтений — в любом случае, как правило, лучше выбирать достаточно маленький размер отступа, чтобы код умещался на одном экране. Я считаю любой отступ шириной от 2 до 8, разумным и читаемым, хотя обнаружил, что более четырех пробелов для отступа могут привести к слишком длинным строкам.
В общем, лучшее решение для слишком длинных строк — снизить сложность кода или, по крайней мере, вытащить некоторые функции в отдельные функции. Это позволит уменьшить число уровней отступа и может сделать код более читаемым (если это делать правильно).
Табы и пробелы
Существует своего рода спор по поводу использования табов или пробелов. Учтите, что это не то же самое, что спросить делаете ли вы отступы пробелами или табами. Большинство людей позволяют текстовому редактору решить это за них (или выбирает преобразовывать табы в пробелы).
Реальная проблема табов и пробелов заключается в том, что происходит, когда кто-то открывает ваш код. Вы можете установить табы для любого количества столбцов, а у человека, открывающего ваш код может быть другая ширина табуляции. Это может сыграть злую шутку даже с хорошо отформатированным кодом. Использование только пробелов исправляет эту проблему, потому что все будет отображаться одинаково.
Иногда достойный форматтер кода, который можно найти в текстовом редакторе, может помочь смягчить эту проблему путем переформатирования кода. Вы также можете изменить свои собственные настройки, чтобы отобразить код правильно (хоть это и не очень приятно).
Самое лучшее решение, если вы все-таки решите использовать табы, быть очень внимательным к тому, с чем вы их используете. Настоящая проблема, на самом деле, возникает, когда табы используются не только для отступа, но и как быстрый способ перемещения на четыре или восемь символов вправо. Например, давайте посмотрим на следующий код:
Если второе условие было отформатировано с помощью таба с отступом в четыре пробела с последующим пробелом, то при открытии в другом редакторе с шириной табов в восемь пробелов, код будет выглядеть некрасиво:
Если для форматирования были использованы пробелы, код будет отображаться правильно:
Неправильное использование пробелов
Сколько пробелов вы используете зависит только от вас. Но, стоит быть в курсе некоторых вопросов. Во-первых, чем больше пробелов помогает подчеркнуть логику вашей программы, тем лучше. Но вы не хотите, чтобы ваши пробелы дезориентировали вас. Это может не запутать вас в данный момент, но может сбить с толку вас в будущем, или кого-то еще, кто будет читать ваш код. Как же выглядит ошибочное форматирование?
Отступ говорит нам, что два выражения сработают, при выполнении условного оператора, но это не то, что происходит на самом деле. Когда вы отслеживаете синтаксическую ошибку в сотнях или тысячах строк кода, вы, в конечном итоге, начинаете просто просматривать код, вместо тщательной проверки каждой строки. Чем проще вам будет просматривать код и выбрать важные детали, тем быстрее вы сможете найти закравшиеся незаметно ошибки. Как, например, в этом примере, к телу оператора if относится только первый оператор.