Quindi, sono abbastanza poco pratico con lo sviluppo di Windows Form.Come cancellare la grafica su un controllo trasparente nei moduli di Windows
che sto cercando di creare un componente "hey io sono occupato a fare cose" che appena gira una forma intorno. Voglio che questo controllo sia transitorio e attingere a qualsiasi altro controllo. La classe eredita direttamente da Control.
Così ho questo nel costruttore:
SetStyle(ControlStyles.Opaque, true);
e questo:
protected override CreateParams CreateParams
{
get
{
CreateParams parms = base.CreateParams;
parms.ExStyle |= 0x20;
return parms;
}
}
Il che mi fa un controllo che si avvarrà in cima ad altri controlli.
Ora il mio problema è questo. Ripasso il controllo alcune volte al secondo per dare l'impressione di un'animazione fluida. Tuttavia, non riesco a capire come cancellare ciò che è stato disegnato nel frame precedente. L'utilizzo di e.Graphics.Clear(Color.Transparent)
in OnPaint
trasforma l'intero controllo in nero.
Esiste un modo per cancellare solo i contenuti disegnati di un controllo?
ho notato che il ridimensionamento del controllo sarà chiaro lo sfondo.
cose che non funzionano
- Overriding OnPaintBackground di non fare nulla. O semplicemente chiamando base.OnPaintBackground. Stessi risultati
Non è necessario per invalidare l'intero controllo padre, ma solo l'area corrispondente al controllo dell'utente: this.Parent.Invalidate (this.ClientRectangle, true); –
@Eric: Grazie per il suggerimento. Penso che possa aver fatto proprio questo! – snicker
Questo non funzionerà correttamente a meno che usercontrol non sia in posizione (0,0). Devi invalidare l'area genitore coperta da usercontrol e utilizzare le coordinate genitore. Inoltre, se l'UserControl aveva una zona non-client trasparente, questa zona non sarebbe ottenere invalidato neanche. Mi piacerebbe andare per 'this.Parent.Invalidate (new Rectangle (this.Location, this.Size), true);' – takrl