В C# я должен иметь возможность, по крайней мере, создавать впечатление из двух столбцов в одном RichTextBox. Для моих целей, это может выглядеть следующим образом:Два столбца в Winforms RichTextBox
1+1 2
70*8+5 565
1000000-300000 700000
76-10 66
Для каждого «вопроса» в левой колонке, будет соответствующим ответом.
'очевидный' решение использовать вкладки, как это:
SelectionTabs = new int[] { 0, 500 };
(или просто установить \ deftab около 3000 в сыром Rtf).
Это все хорошо и хорошо, пока левый столбец ввода ITSELF не содержит вкладок. Когда это так, все идет грушевидно. Я не против вставлять несколько табуляторов, но это не сработает, когда вход содержит текст, который иногда проходит «мимо» определенной вкладки-остановки. Обнаружение этого и учет его должным образом не просто трудно сделать, но также чревато опасностью из-за «очень-почти-но-не-полностью-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, и, похоже, я ничего не могу с этим поделать. C# RichTextBoxes, похоже, не справляются с таблицами (это было еще одно потенциальное решение). Также есть столбцы Rtf, но даже если они поддерживаются, они, вероятно, не помогут из-за того, что первый столбец переключится на второй столбец на том же листе бумаги, как только он будет заполнен (вместо сохранения в первом столбце и перейдя ко второй странице бумаги, что я бы хотел).
Я задал эту проблему так много времени, и у меня полная потеря. Что-то настолько простое на самом деле невероятно сложно сделать правильно. Если мне не хватает чего-то очевидного ...
---------------- EDIT 1: Это необходимо для работы с шрифтами с фиксированной шириной, поэтому я не могу просто площадку с пробелами.
http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/194f563c-205f-41a1-9582-4f03fd3a53c2/ –
Спасибо, это интересно и может пригодиться в будущем. На данный момент я предоставил свой собственный ответ на основе вкладок (что является kludgy по-своему). –