Итак, я довольно незнакома с разработкой форм 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. Те же результаты.
Вам не нужно отменять весь родительский элемент управления, но только область, соответствующая пользовательскому элементу управления: this.Parent.Invalidate (this.ClientRectangle, true); –
@ Эрик: Спасибо за подсказку. Думаю, я, возможно, так и сделал! – snicker
Это не будет работать должным образом, если пользовательский контроль не находится в месте (0,0). Вы должны аннулировать родительскую область, охватываемую usercontrol, и использовать родительские координаты. Кроме того, если usercontrol имеет прозрачную неклиентскую область, эта область также не будет признана недействительной. Я бы пошел на 'this.Parent.Invalidate (новый Rectangle (this.Location, this.Size), true);' – takrl