Окрашенная граница проходит в определенных ситуациях

В моем инструменте я использую панель для смены страниц. Каждая страница имеет свою панель, и когда я меняю страницу, я отправляю панель с элементами управления. На панели, которую я использую в качестве холста, у меня есть следующее событие рисования:

    private void panelContent_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
        e.Graphics.SmoothingMode = SmoothingMode.HighQuality;

        // Paints a border around the panel to match the treeview control
        e.Graphics.DrawRectangle(Pens.CornflowerBlue,
            e.ClipRectangle.Left,
            e.ClipRectangle.Top,
            e.ClipRectangle.Width - 1,
            e.ClipRectangle.Height - 1);

        e.Graphics.Flush();

        base.OnPaint(e);
    }

Этот метод в основном рисует красивую рамку вокруг панели, чтобы она выглядела лучше. По какой-то причине, когда я перемещаю другую форму над этой панелью, линии, составляющие границу, начинают немного бежать. Иногда небольшие линии также будут проведены от границы. Проблема возникает только в течение нескольких секунд, прежде чем вся панель снова перерисовывается. Могу ли я что-нибудь сделать, чтобы этого не произошло?


person Icono123    schedule 16.02.2010    source источник


Ответы (1)


ClipRectangle сообщает вам, какую часть элемента управления необходимо перекрасить. Если вы перемещаете что-то над ним, это, вероятно, будет пересечение вашего объекта и того, который перемещается. Вы можете использовать эту информацию для более эффективной перерисовки элемента управления.

Возможно, вы захотите нарисовать прямоугольник от (0, 0) до (panelContent.Width-1, panelContent.Height-1).

person Joseph    schedule 16.02.2010
comment
Работает как шарм: private void panelContent_Paint(object sender, PaintEventArgs e) { e.Graphics.CompositingQuality = CompositingQuality.HighQuality; e.Graphics.SmoothingMode = SmoothingMode.HighQuality; e.Graphics.DrawRectangle(Pens.CornflowerBlue, 0, 0, panelContent.Width - 1, panelContent.Height - 1); e.Graphics.Flush(); база.OnPaint(е); } Спасибо! - person Icono123; 17.02.2010