Пользовательская толстая граница ячейки Draw

У меня есть сетка с несколькими столбцами с нарисованными границами. Но когда мы сравниваем границы пользовательского рисунка с обычными (не настроенными) столбцами, они немного толще. Поэтому, если мы применим задний цвет, вся ячейка будет заполнена, как в строке № 2, столбце 1. Есть ли способ удалить эту толщину, чтобы настроенные и не настроенные ячейки выглядели одинаково.

Цитата

введите здесь описание изображения

Код выглядит следующим образом:

private void uxGrid_CustomDrawCell(object sender, RowcellCustomDrawEventArgs e)
{
if(col==1)
{
DrawCellBorder(b,e.bounds);
}
}

private void DrawCellBorder(RowCellCustomDrawEventArgs e, int top, int left, int right, int bottom)
{

Brush b = Brushes.Red;

if(top ==1)
e.Graphics.Fillrectangle(b, new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bound.Width,1));


if(right ==1)
e.Graphics.Fillrectangle(b, new Rectangle(e.Bounds.X.Right, e.Bounds.Y, 1, e.Bound.Height));


if(bottom ==1)
e.Graphics.Fillrectangle(b, new Rectangle(e.Bounds.X, e.Bounds.Bottom, e.Bound.Width,1));


if(left ==1)
e.Graphics.Fillrectangle(b, new Rectangle(e.Bounds.X, e.Bounds.Y, 1, e.Bounds.Height));

}

person 17CrazyBrain    schedule 17.05.2013    source источник
comment
Я считаю, что причина этой проблемы в вашем пользовательском коде отрисовки. Не могли бы вы добавить этот код к исходному вопросу?   -  person DmitryG    schedule 17.05.2013


Ответы (2)


Я считаю, что вы можете использовать следующий код:

void gridView1_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e) {
    var cellBounds = ((DevExpress.XtraGrid.Views.Grid.ViewInfo.GridCellInfo)e.Cell).Bounds;
    DrawCellBorder(e.Graphics, Brushes.Red, cellBounds, 1);
}
void DrawCellBorder(Graphics g, Brush borderBrush, Rectangle cellBounds, int borderThickness) {
    Rectangle innerRect = Rectangle.Inflate(cellBounds, -borderThickness,- borderThickness);
    g.ExcludeClip(innerRect);
    g.FillRectangle(borderBrush, cellBounds);
}

Обратите внимание, что e.Bounds возвращает прямоугольник содержимого ячейки в обработчике событий CustomDrawCell (а не все границы ячейки).

person DmitryG    schedule 17.05.2013
comment
Это идеальный. Спасибо, Дмитрий, за ценное время и предложение. - person 17CrazyBrain; 17.05.2013

Я сделал это с помощью этого кода, надеюсь, это поможет: (работает для итогов)

    `if (e.RowValueType == PivotGridValueType.Total)  
            {                         
         e.GraphicsCache.FillRectangle(new   LinearGradientBrush(e.Bounds,            Color.LightBlue, Color.Blue, LinearGradientMode.Vertical), e.Bounds);

                Rectangle innerRect = Rectangle.Inflate(e.Bounds, -3, -3);
                e.GraphicsCache.FillRectangle(new LinearGradientBrush(e.Bounds, Color.Blue,
                    Color.LightSkyBlue, LinearGradientMode.Vertical), innerRect);
                e.GraphicsCache.DrawString(e.DisplayText, e.Appearance.Font,
                    new SolidBrush(Color.White), innerRect, e.Appearance.GetStringFormat());
                e.Handled = true;
            }    '
person Milen    schedule 17.05.2013
comment
Я проверил этот код с моим требованием. Это также не заполняет прямоугольник полностью. - person 17CrazyBrain; 17.05.2013
comment
попробуйте установить границы следующим образом: (e.Bounds, 0, 0) - person Milen; 17.05.2013