Сохранение (Rich) TextBox в памяти и отключение их с помощью richtextbox в моей форме в C # - PullRequest
0 голосов
/ 01 декабря 2009

Моя цель - иметь один основной richtextbox в форме, а затем несколько разных richtextbox в фоновом режиме, текстовое поле фонового изображения постоянно добавляется, удаляется и редактируется за кулисами ... и мне нужен способ поменяться мой richtextbox в форме с richtextbox в фоновом режиме. то, что я изначально имел, был словарь

Dictionary<string, RichTextBox> RichTextBoxs = new Dictionary<string, RichTextBox>();

и просто пошел бы

string Data = "string";
RichTextBox box = new RichTextBox();
box.Text = "Session for \""+Data+"\" started!";
box.Tag = (string)Data;
RichTextBoxs.Add(Data, box);

и все отлично, но в тот момент, когда я пытаюсь что-то вроде

richTextBox1 = RichTextBoxs[(string)Data];

Ничего не происходит! я могу скопировать атрибуты вроде

richTextBox1.Text = RichTextBoxs[(string)Data].Text;

отлично работает, но мне нужно скопировать ВСЕ свойства вместе с моим расширенным форматированием цвета в текстовых полях. я не знаю, почему это не работает, потому что, насколько я знаю, это должно!

Резюме: мне нужно иметь возможность поменять текстовые поля формы с сохраненными текстовыми полями

~ пример кода приветствуется! и заранее спасибо!

Ответы [ 2 ]

1 голос
/ 01 декабря 2009

Для решения вашей проблемы вам просто нужно использовать свойство Rtf, а не свойство Text:

richTextBox1.Rtf = RichTextBoxs[(string)Data].Rtf;

Но я согласен с Дэвидом Хэем, что вы должны хранить строку Rtf непосредственно в Словаре, а не в другом скрытом RichTextBox.

1 голос
/ 01 декабря 2009

Почему бы просто не сохранить данные для каждого текстового поля в словаре и поменять их местами из одного и того же фактического элемента управления? Насколько я понимаю, все форматирование и т. Д. RTF прямо в необработанных текстовых данных (которые могут отличаться от свойства text). Перелистывание и показ / скрытие всех этих элементов управления может вызвать у вас массу головных болей, и, на мой взгляд, было бы предпочтительнее альтернативное решение.

Чтобы добавить больше материала: Причина, по которой он не работает в вашем образце, заключается в том, что вам не хватает гигантской кучи сгенерированного дизайнером кода, которая дополняет элементы управления окнами; такие вещи, как позиция, размер, видимость и т. д. и т. д. Вы заменяете ссылку на класс на исходное поле RTF, но в новом нет инициализированных элементов.

РЕДАКТИРОВАТЬ 2: Если вам действительно нужно, чтобы все работало так, как описано, вам придется много работать в коде, который их переключает. Возьмите управление хостингом (возможно, саму форму) и удалите отображаемое окно RTF. Затем вам нужно будет инициализировать все свойства блока замены, такие как размер, положение, стиль привязки и т. Д. Наконец, вам нужно будет добавить новый элемент управления к элементу хоста, который содержал предыдущий блок RTF. Сейчас я не помню, но думаю, что для предотвращения утечек памяти требуется еще один шаг.

...