Tak, jestem dość obeznany z tworzeniem formularzy okien.Jak wyczyścić grafikę na przezroczystym sterowaniu w formularzach okienkowych
Próbuję utworzyć komponent "hej jestem zajęty robieniem rzeczy", który po prostu kręci się wokół. Chcę, aby ta kontrola była przejściowa i opierała się na jakichkolwiek innych kontrolach. Klasa dziedziczy bezpośrednio od kontroli.
Więc mam to w konstruktorze:
SetStyle(ControlStyles.Opaque, true);
i tak:
protected override CreateParams CreateParams
{
get
{
CreateParams parms = base.CreateParams;
parms.ExStyle |= 0x20;
return parms;
}
}
które dostaje mi kontrolę, która będzie się opierała na wierzchu innych kontroli.
Teraz mój problem jest taki. Odświeżam kontrolkę kilka razy na sekundę, aby nadać wrażenie gładkiej animacji. Jednak nie mogę wymyślić, jak wyczyścić to, co zostało narysowane w poprzedniej ramce. Korzystanie z e.Graphics.Clear(Color.Transparent)
w OnPaint
zmienia kolor całej kontrolki na czarny.
Czy istnieje sposób, aby po prostu wyczyścić zawartość kontrolki?
Zauważyłem, że zmiana rozmiaru kontrolki usunie tło.
Rzeczy, które nie działają
- nadrzędnym OnPaintBackground nic nie robić. Lub po prostu wywołanie base.OnPaintBackground. Takie same wyniki.
Nie trzeba unieważniać całego elementu nadrzędnego, ale tylko obszar odpowiadający formantowi użytkownika: this.Parent.Invalidate (this.ClientRectangle, true); –
@Eric: Dzięki za cynk. Myślę, że mogłem to zrobić! – snicker
To nie będzie działać poprawnie, chyba że kontrola użytkownika znajduje się w lokalizacji (0,0). Musisz unieważnić obszar nadrzędny objęty kontrolą użytkownika i użyć współrzędnych nadrzędnych. Ponadto, jeśli kontrolka użytkownika miałaby przezroczysty obszar poza obszarem klienta, obszar ten również nie zostałby unieważniony. Wybrałbym 'this.Parent.Invalidate (new Rectangle (this.Location, thisSize), true);' – takrl