Найти и перебрать таблицы в Richtextbox
Я не знал, что будет так сложно играть с управлением Richtextbox. Я пытаюсь получить данные буфера обмена и пытаюсь установить их в RichTextBox.
RichTextBox rtb = new RichTextBox();
rtb.Rtf = Clipboard.GetText(TextDataFormat.Rtf);
Как перебрать коллекцию таблиц или индивидуальные таблицы? Можем ли мы найти количество таблиц в RichTextBox?
Моя цель - найти какие-либо таблицы в данных RTF буфера обмена и, если да, то проверить их на наличие данных.
1 ответ
Хотя уже слишком поздно, чтобы ответить на этот вопрос. Я также столкнулся с тем же требованием. Так я поступил:
private static void findTableinRtf(string rtf)
{
var flowDocument = new FlowDocument();
var textRange = new TextRange(flowDocument.ContentStart, flowDocument.ContentEnd);
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(rtf)))
{
textRange.Load(ms, DataFormats.Rtf);
}
var blocks = flowDocument.Blocks;
foreach (var block in flowDocument.Blocks)
{
switch (block)
{
case List list:
//implement List;
break;
case Table table:
workWithTable(table);
break;
case Paragraph paragraph:
convertParagraph(paragraph);
break;
case Section section:
convertSection(section);
break;
}
}
}
private static void workWithTable(Table rtfTable)
{
TableColumnCollection columns = rtfTable.Columns;
TableRowGroupCollection rowGroups = rtfTable.RowGroups;
foreach (var row in rowGroups[0].Rows)
{
//access cells
// row row.Cells[i];
}
}