Отображать индексы и надписи в RichTextBox в C#, версия 2
В следующих примерах показано, как отображать индексы и верхние индексы в RichTextBox.
Это были довольно простые примеры, и Судир Шривастава обнаружил ситуацию, в которой второй не справился: у него проблемы с отображением + и - знаков в индексах и надстроках. В этом примере используется несколько модифицированный подход для обработки этих символов.
Ключ следующий метод MakeRtfSubsSupers.
// Создавать индексы и надстрочные индексы в элементе управления
// для следующих символов - и +. Чтобы сделать - или +,
// используем / - и / +.
private void MakeRtfSubsSupers(RichTextBox rch,
string text, Font small_font, int offset)
{
// Найдите позиции индекса и надстроки.
List subs = new List();
List supers = new List();
string new_text = "";
int pos = 0;
while (pos < text.Length)
{
char ch = text[pos];
// Проверяем специальные символы.
if ((ch == '/') || (ch == '-') || (ch == '+'))
{
// Добавить следующий символ в новый текст.
pos++;
new_text += text[pos];
// Отметьте как индекс или надстрочный индекс, если это необходимо.
if (ch == '-') subs.Add(new_text.Length - 1);
if (ch == '+') supers.Add(new_text.Length - 1);
}
else new_text += ch;
// Переместимся к следующему символу.
pos++;
}
// Отформатируем индексы и надстрочные индексы.
rch.Text = new_text;
foreach (int position in subs)
{
rch.Select(position, 1);
rch.SelectionCharOffset = -offset;
rch.SelectionFont = small_font;
}
foreach (int position in supers)
{
rch.Select(position, 1);
rch.SelectionCharOffset = offset;
rch.SelectionFont = small_font;
}
}
Этот метод проходит через символы в строке. Если он находит символ /, он добавляет следующий символ в новую строку без интерпретации этого символа. Например, чтобы ввести знак + или -, строка должна включать / + или / - соответственно.
Если код обнаруживает знак a, он добавляет следующий символ в новую строку и записывает позицию этого символа в список subs.
Если код находит знак +, он добавляет следующий символ в новую строку и записывает позицию этого символа в список supers.
После завершения обработки строки код перебирает через subs и supers списки и настраивает эти символы, чтобы соответственно сделать индексы и верхние индексы.
Пример текста, показанного на рисунке вверху этого сообщения, демонстрирует символы +, - и / как в нижних индексах, так и в надстроках (и в обычном тексте).
