2015-12-30 7 views
0

Мне сложно провести рендеринг ячеек в C1FlexGrid, когда мне нужно установить цвет фона, нарисовать изображение и заполнить прямоугольник для широкой границы. Кажется, я не могу получить правильную комбинацию DrawCell, DrawImage и FillRectangle для каждой ячейки, чтобы правильно рисовать.Графика DrawImage, FillRectangle и DrawCell для ячеек в C1FlexGrid

Событие «OwnerDrawCell» - это место, где я рисую содержимое, границу и изображение.

Сначала я устанавливаю ячейки BackColor каждой ячейки на что-то вроде этого:

e.Style.BackColor = lockedBackColor; 

Тогда для некоторые клетки я рисую изображение и текст.

// CENTER TEXT IN CELL; IMAGE IS RIGHT JUSTIFIED, CENTERED VERTICALLY 
// Must draw cell first - background color, borders, etc.. 
e.DrawCell(DrawCellFlags.Background | DrawCellFlags.Border); 

// Draw cell text 
int textWidth = (int)e.Graphics.MeasureString(e.Text, e.Style.Font).Width; 
int textHeight = (int)e.Graphics.MeasureString(e.Text, e.Style.Font).Height; 
float textCenterX = e.Bounds.Left + ((e.Bounds.Width - textWidth)/2); 
float textCenterY = e.Bounds.Top + ((e.Bounds.Height - textHeight)/2); 
e.Graphics.DrawString(e.Text, e.Style.Font, brushColorForString, textCenterX, textCenterY); 

if (e.Row == 8 || PlantHasBins()) 
{ 
    // Draw cell image 
    int cellImageX = e.Bounds.Right - _cellImage.Width; 
    int cellImageY = e.Bounds.Top + ((e.Bounds.Height - _cellImage.Height)/2); 
    var cellImagePoint = new Point(cellImageX, cellImageY); 
    e.Graphics.DrawImage(_cellImage, cellImagePoint); 
} 

e.Handled = true; 

Тогда для некоторых столбцов Я хочу, чтобы нарисовать тяжелую правую границу, чтобы дать визуальное разделение между группами столбцов.

e.DrawCell(DrawCellFlags.Border); 

Rectangle rc; 
Margins m = new Margins(0, 0, 0, 0); 
m.Right = 3; 
CellRange rg; 

rg = PlantAlleyBinGrid.GetCellRange(e.Row, e.Col); 
rc = e.Bounds; 
rg.c1 = rg.c2 = 2 + 1; 
rg.c1 = rg.c2 = 2; 

rc.X = rc.Right - m.Right; 
rc.Width = m.Right; 
e.Graphics.FillRectangle(new SolidBrush(Color.Black), rc); 

e.Handled = true; 

Код как написано почти там. Я пробовал много альтернатив и потоков, но в итоге он не рисовал изображение ячейки, границу ячейки, содержимое ячейки или любую их комбинацию.

Мне нужна помощь в том, как нарисовать все на ячейке.

ответ

0

Я решил это, вызвав DrawCell и DrawString для ячеек, которые не рисуют изображение.