Граница в DrawRectangle - PullRequest
       48

Граница в DrawRectangle

27 голосов
/ 29 мая 2009

Что ж, я кодирую событие OnPaint для своего собственного элемента управления, и мне совершенно необязательно делать его точным.

У меня небольшая проблема с границами прямоугольников.

Смотри картинку:

удалена мертвая ссылка ImageShack

Эти два прямоугольника были нарисованы с одинаковыми параметрами местоположения и размера, но с разным размером пера. Видишь, что случилось? Когда граница стала больше, она съела свободное пространство перед прямоугольником (слева).

Интересно, есть ли какое-то свойство, которое позволяет рисовать границу внутри прямоугольника, чтобы расстояние до прямоугольника всегда было одинаковым. Спасибо.

Ответы [ 4 ]

52 голосов
/ 27 апреля 2010

Вы можете сделать это, указав PenAlignment

Pen pen = new Pen(Color.Black, 2);
pen.Alignment = PenAlignment.Inset; //<-- this
g.DrawRectangle(pen, rect);
6 голосов
/ 29 мая 2009

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

private void DrawRectangle(Graphics g, Rectangle rect, float penWidth)
{
    using (Pen pen = new Pen(SystemColors.ControlDark, penWidth))
    {
        float shrinkAmount = pen.Width / 2;
        g.DrawRectangle(
            pen,
            rect.X + shrinkAmount,   // move half a pen-width to the right
            rect.Y + shrinkAmount,   // move half a pen-width to the down
            rect.Width - penWidth,   // shrink width with one pen-width
            rect.Height - penWidth); // shrink height with one pen-width
    }
}
1 голос
/ 29 мая 2009

Это не прямой ответ на вопрос, но вы можете рассмотреть возможность использования метода ControlPaint.DrawBorder. Вы можете указать стиль границы, цвет и различные другие свойства. Я также верю , что он регулирует поля для вас.

0 голосов
/ 29 мая 2009

Полагаю, нет ... но вы можете переместить положение рисования на половину размера пера вниз вправо

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