Domanda

Quindi, non ho familiarità con lo sviluppo di moduli Windows.

Sto cercando di creare un " hey, sono impegnato a fare cose " componente che gira solo una forma. Voglio che questo controllo sia temporaneo e attinga da qualsiasi altro controllo. La classe eredita direttamente da Control.

Quindi 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 dà un controllo che attingerà ad altri controlli.

Ora il mio problema è questo. Ridipingo il controllo alcune volte al secondo per dare l'apparenza di un'animazione fluida. Tuttavia, non riesco a capire come cancellare ciò che è stato disegnato nel fotogramma precedente. L'uso di e.Graphics.Clear (Color.Transparent) in OnPaint rende l'intero controllo nero.

C'è un modo per cancellare semplicemente il contenuto disegnato di un controllo?

Ho notato che il ridimensionamento del controllo cancellerà lo sfondo.

Cose che non funzionano

  1. Ignorando OnPaintBackground per non fare nulla. O semplicemente chiamando base.OnPaintBackground. Stessi risultati.
È stato utile?

Soluzione

Okay, ho trovato la soluzione qui: http://www.bobpowell.net/transcontrols.htm

I controlli Parent devono effettivamente essere invalidati per mantenere lo sfondo trasparente.

Altri suggerimenti

Potrebbe essere necessario sovrascrivere OnPaintBackground che questo articolo presenta: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html

Potrebbe inoltre essere necessario invalidare il controllo quando deve essere cancellato per forzare la chiamata a OnPaintBackground.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top