Как очистить графику на прозрачном элементе управления в окнах форм

StackOverflow https://stackoverflow.com/questions/1609032

Вопрос

Итак, я довольно незнаком с разработкой форм Windows.

Я пытаюсь создать " эй, я занят чем-то занимаюсь " компонент, который просто вращается вокруг формы. Я хочу, чтобы этот элемент управления был временным и рисовал поверх любых других элементов управления. Класс наследуется непосредственно от Control.

Итак, у меня есть это в конструкторе:

SetStyle(ControlStyles.Opaque, true);

и это:

protected override CreateParams CreateParams
{
    get
    {
        CreateParams parms = base.CreateParams;
        parms.ExStyle |= 0x20; 
        return parms;
    }
}

Это дает мне элемент управления, который будет рисовать поверх других элементов управления.

Теперь моя проблема заключается в следующем. Я перекрашиваю элемент управления несколько раз в секунду, чтобы создать плавную анимацию. Однако я не могу понять, как очистить то, что было нарисовано в предыдущем кадре. Использование e.Graphics.Clear (Color.Transparent) в OnPaint делает весь элемент управления черным.

Есть ли способ просто очистить нарисованное содержимое элемента управления?

Я заметил, что изменение размера элемента управления очистит фон.

То, что не работает

<Ол>
  • Переопределение OnPaintBackground ничего не делать. Или просто вызов base.OnPaintBackground. Те же результаты.
  • Это было полезно?

    Решение

    Хорошо, я нашел решение здесь: http://www.bobpowell.net/transcontrols.htm

    Родительские элементы управления должны быть недействительными, чтобы сохранить прозрачный фон.

    Другие советы

    Возможно, вам придется переопределить OnPaintBackground, представленное в этой статье: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top