Абзац отображается как дочерний элемент другого элемента даже после очистки RichTextbox

У меня есть два RichTextboxes на моей странице. Я использую их как интерфейс книги. Есть две кнопки для поворота вперед и назад.

Перелистывание страниц вперед работает нормально. Но как только я наношу ответный удар, VS2010 выдает исключение

Element is already the child of another element.

Это для абзаца, который я добавляю в RichTextbox. Это происходит, несмотря на то, что я очищаю оба RichTextboxes, прежде чем заливать их новыми данными.

Мой код ниже. Что мне не хватает?

TxtBlobLeft.Blocks.Clear();
        TxtBlobRight.Blocks.Clear();


        foreach (Paragraph item in pagesStack[count].paras)
        {
            TxtBlobLeft.Blocks.Add(item); //Throws exception here
        }


        foreach (Paragraph item in pagesStack[count + 1].paras)
        {
            TxtBlobRight.Blocks.Add(item);
        }

Примечание: pagesStack — это настраиваемый объект с Paras (т.е. List) в качестве свойства.


person Omkar Khair    schedule 04.10.2012    source источник
comment
Я не эксперт по элементу управления RichTextbox, поэтому я не уверен в некоторых ваших свойствах. Есть ли пользовательский объект, который вам нужно более подробно объяснить? Я предполагаю, что TxtBlobLeft — это RichTextbox, но я не нахожу свойства Blocks и не понимаю, как вы добавляете элемент типа Paragraph. Несмотря на все это, кажется, что у вас есть ссылка в объекте абзаца на поле форматированного текста, которое необходимо удалить, прежде чем вы вернетесь и добавите его снова.   -  person Michael Sallmen    schedule 04.10.2012
comment
Да. TxtBlobLeft — это RichTextbox. И да, по-видимому, TxtBlobLeft.Blocks.Clear() не удаляет элемент.   -  person Omkar Khair    schedule 04.10.2012
comment
Я столкнулся с подобной проблемой. Я думаю, что это ошибка в RTB.   -  person jv42    schedule 05.10.2012
comment
Мой обходной путь состоял в том, чтобы воссоздавать абзац каждый раз.   -  person jv42    schedule 05.10.2012


Ответы (2)


Похоже, Clear не удаляет родительскую ссылку Paragraphs на RTB. Я создал новый метод для Clear, используя следующий цикл forach для удаления всех элементов.

foreach (Paragraph item in paras)
        {
            Page1.Blocks.Remove(item);
        }

paras — это мой список абзацев, который я ранее добавил в RTB.

person Omkar Khair    schedule 07.10.2012

Можете ли вы проверить в отладчике, что является родителем элемента при входе в цикл?

person user1140705    schedule 04.10.2012
comment
Родителем является сам RichTextbox. Он не удаляется, когда я очищаю элементы. - person Omkar Khair; 04.10.2012