Графика DrawImage, FillRectangle и DrawCell для ячеек в C1FlexGrid

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

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

Сначала я устанавливаю задний цвет каждой ячейки примерно так:

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;

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

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

1 ответ

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

Другие вопросы по тегам