В C # мне нужно иметь возможность по крайней мере создать впечатление двух столбцов в одном RichTextBox.Для моих целей это может выглядеть так:
1+1 2
70*8+5 565
1000000-300000 700000
76-10 66
Для каждого «вопроса» в левом столбце будет соответствующий ответ.
«Очевидное» решение состоит в использованиивкладки, подобные этой:
SelectionTabs = new int[] { 0, 500 };
(или просто установите \ deftab на 3000 в необработанном Rtf).
Это все хорошо, пока ввод левой колонки САМ не содержит вкладок.Когда это так, все становится грушевидным.Я не возражаю против вставки нескольких табуляций, но это не будет хорошо работать, когда ввод содержит текст, который иногда проходит мимо определенной табуляции.Обнаружение этого и учет его должным образом не только трудно сделать, но и сопряжено с опасностью из-за результатов «очень почти, но не совсем WYSIWIG», которые возникают при печати, и того, как влияют вкладки.
Другая идея состоит в том, чтобы иметь глобальный размер вкладки (используя \ deftab в Rtf), а затем вычислить, сколько вкладок должно автоматически вставляться после каждой строки в левом столбце (на основе самой длинной строки в левом столбце).Проблема этого подхода заключается в том, что, хотя на экране все выглядит отлично, когда дело доходит до печати, в правой колонке есть некоторые глюки.Под «глюками» я подразумеваю, что примерно 1 из каждых 20 строк будет иметь «потерянную» или «лишнюю» вкладку.Это связано с тем, что печать не совсем WYSIWIG, даже после того, как я следовал этому уроку: http://msdn.microsoft.com/en-us/library/ms996492.aspx
Достаточно сказать, что даже несколько пикселей / точек при печати могут сильно повлиять на расположение вкладокпо сравнению с представлением RichTextBox на экране.
Я также пытался изменить положение табуляции на полпути через строку в Rtf, но, к сожалению, такой управляющий код применяется с начала строки, несмотря наего местоположение в Rtf.
Я также прочесывал спецификацию Rtf из http://www.biblioscape.com/rtf15_spec.htm,, и, похоже, я мало что могу с этим поделать.RichTextBox в C #, кажется, не ладит с таблицами (что было еще одним потенциальным решением).Есть также столбцы Rtf, но даже если они поддерживаются, они, вероятно, не помогут из-за того, как первый столбец переключится на второй столбец на том же листе бумаги после его заполнения (вместо сохранения первого столбца ипереходя ко второй странице статьи, что я и хотел бы.
Я уделил этой проблеме много времени, и я в полном недоумении.Что-то очень простое на самом деле невероятно сложно сделать правильно.Если я не пропустил что-то очевидное ...
---------------- РЕДАКТИРОВАТЬ 1: Это должно работать со шрифтами не фиксированной ширины, поэтому я могу 'т просто заполнить пробелами.