Как нарисовать подраздел текста с использованием графики .net - PullRequest
2 голосов
/ 31 декабря 2008

Я делаю собственное рисование в ячейках таблицы данных, и у меня есть элементы, которые могут вертикально охватывать несколько ячеек. Элемент отображает текст, и проблема в том, как нарисовать только часть ячейки текста? У меня есть прямоугольник элемента и cellBounds.

В настоящее время я рисую все текст на каждой ячейке, т.е. рисую поверх ячеек, отличных от той, из которой я в данный момент рисую. Это требует, чтобы я очистил предыдущий текст (чтобы он не был размытым и жирным) ... так что я на самом деле рисую строку дважды на краску ячейки. Не очень эффективно.

//get the actual bounds of this  entire item spanning across multiple cells
RectangleF sRectF = GetItemRectF(startX + leftMargin + 2, widthForItem, cellBounds, calItem);

//we clear it out first, otherwise the text looks bolded if we keep drawing a black string over and over
//todo should figure out how to only draw this cells section? cellBounds subsection of sRectF somehow
graphics.DrawString(calItem.Description, new Font("Tahoma", 8), new SolidBrush(itemBackColor), sRectf);
graphics.DrawString(calItem.Description, new Font("Tahoma", 8), new SolidBrush(Color.Black), sRectF);

Могу ли я нарисовать строку на некоторой временной графике, а затем выхватить часть границ ячейки и нарисовать ее на реальной графике? Есть ли лучший способ?

Спасибо

** * 1011 1012 * Ответ * +1014 *
Region tempRegion = graphics.Clip;
graphics.Clip = new Region(cellBounds);
graphics.DrawString(calItem.Description, new Font("Tahoma", 8), new SolidBrush(Color.Black), sRectF);
graphics.Clip = tempRegion;

1 Ответ

1 голос
/ 31 декабря 2008

Мне кажется, я не совсем понимаю тот визуальный эффект, который вы намереваетесь получить. Должен ли текст элемента перекрывать несколько ячеек или обрезаться до одной ячейки? Если он должен быть обрезан по ячейке, вы можете установить область отсечения с помощью Graphics.Clip, чтобы обрезать указанный прямоугольник.

Если проблема связана с размытием из-за отсутствия очистки буфера, вы можете использовать FillRectangle, чтобы очистить область дешевле, чем при рисовании текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...