Я делаю собственное рисование в ячейках таблицы данных, и у меня есть элементы, которые могут вертикально охватывать несколько ячеек. Элемент отображает текст, и проблема в том, как нарисовать только часть ячейки текста? У меня есть прямоугольник элемента и 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;