.NET PowerPacks RectangleShape мерцает при изменении размера формы - PullRequest
0 голосов
/ 05 июля 2011

Я могу сделать что-то простое, как:

  1. Создание нового приложения формы .NET
  2. Поместите одну форму RectangleShape на форму
  3. добавить следующее в метод InitializeComponent в коде конструктора

    Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or _
        ControlStyles.UserPaint Or _
        ControlStyles.DoubleBuffer, True)
    Me.UpdateStyles()
    
  4. Запустить программу
  5. Изменить размер формы
  6. Смотрите сердито, когда прямоугольник мерцает

Можно ли от этого избавиться? Или внутри ShapeContainer есть недостатки, и мне нужно найти другое решение?

Ответы [ 2 ]

2 голосов
/ 05 июля 2011

Это довольно некорректно. Он использует свое собственное окно, которое накладывается на форму с включенным стилем WS_EX_TRANSPARENT. Этот стиль делает его невидимым, но также препятствует правильной работе любой двойной буферизации. Двойная буферизация формы не действует, неправильное окно.

В остальном это довольно дорогой способ рисовать фигуры. Дешевый и не мерцающий способ - использовать e.Graphics.FillRectangle () в переопределении формы OnPaint () или обработчике события Paint.

0 голосов
/ 05 июля 2011

Я никогда не использовал ShapeContainer, но когда я делаю такую ​​графику, я создаю подкласс для Panel, и в конструкторе моего подкласса я устанавливаю DoubleBuffered в true.

Более конкретный пример кода здесь .

...