Condividi tramite


Graphics.Restore(GraphicsState) Metodo

Definizione

Ripristina lo stato di questo Graphics allo stato rappresentato da un GraphicsState.

public:
 void Restore(System::Drawing::Drawing2D::GraphicsState ^ gstate);
public void Restore (System.Drawing.Drawing2D.GraphicsState gstate);
member this.Restore : System.Drawing.Drawing2D.GraphicsState -> unit
Public Sub Restore (gstate As GraphicsState)

Parametri

gstate
GraphicsState

GraphicsState che rappresenta lo stato in cui ripristinare questo Graphics.

Esempio

L'esempio di codice seguente è progettato per l'uso con Windows Form e richiede PaintEventArgse, che è un parametro del gestore eventi Paint. Il codice esegue le azioni seguenti:

  • Converte la trasformazione globale di Windows Form da un vettore (100, 0).

  • Salva lo stato grafico del form.

  • Reimposta la trasformazione globale del modulo in un'identità e riempie un rettangolo con un pennello rosso a tinta unita.

  • Ripristina lo stato grafico tradotto e riempie un secondo rettangolo con un pennello blu a tinta unita.

Il risultato è un rettangolo con riempimento rosso non convertito e un rettangolo con riempimento blu convertito.

public:
   void SaveRestore2( PaintEventArgs^ e )
   {
      // Translate transformation matrix.
      e->Graphics->TranslateTransform( 100, 0 );

      // Save translated graphics state.
      GraphicsState^ transState = e->Graphics->Save();

      // Reset transformation matrix to identity and fill rectangle.
      e->Graphics->ResetTransform();
      e->Graphics->FillRectangle( gcnew SolidBrush( Color::Red ), 0, 0, 100, 100 );

      // Restore graphics state to translated state and fill second
      // rectangle.
      e->Graphics->Restore( transState );
      e->Graphics->FillRectangle( gcnew SolidBrush( Color::Blue ), 0, 0, 100, 100 );
   }
private void SaveRestore2(PaintEventArgs e)
{

    // Translate transformation matrix.
    e.Graphics.TranslateTransform(100, 0);

    // Save translated graphics state.
    GraphicsState transState = e.Graphics.Save();

    // Reset transformation matrix to identity and fill rectangle.
    e.Graphics.ResetTransform();
    e.Graphics.FillRectangle(new SolidBrush(Color.Red), 0, 0, 100, 100);

    // Restore graphics state to translated state and fill second

    // rectangle.
    e.Graphics.Restore(transState);
    e.Graphics.FillRectangle(new SolidBrush(Color.Blue), 0, 0, 100, 100);
}
Private Sub SaveRestore2(ByVal e As PaintEventArgs)

    ' Translate transformation matrix.
    e.Graphics.TranslateTransform(100, 0)

    ' Save translated graphics state.
    Dim transState As GraphicsState = e.Graphics.Save()

    ' Reset transformation matrix to identity and fill rectangle.
    e.Graphics.ResetTransform()
    e.Graphics.FillRectangle(New SolidBrush(Color.Red), 0, 0, 100, 100)

    ' Restore graphics state to translated state and fill second

    ' rectangle.
    e.Graphics.Restore(transState)
    e.Graphics.FillRectangle(New SolidBrush(Color.Blue), 0, 0, _
    100, 100)
End Sub

Commenti

Quando si chiama il metodo Save di un Graphics, un blocco di informazioni che contiene lo stato del Graphics viene inserito in uno stack. Il metodo Save restituisce un GraphicsState che identifica tale blocco di informazioni. Quando si passa il GraphicsState di identificazione al metodo Restore, il blocco di informazioni viene rimosso dallo stack e viene usato per ripristinare il Graphics allo stato in cui si trovava al momento della chiamata al metodo Save. Si noti che il GraphicsState restituito da una determinata chiamata al metodo Save può essere passato una sola volta al metodo Restore.

Le chiamate al metodo Save possono essere annidate; ovvero, è possibile chiamare il metodo Save più volte prima di chiamare il metodo Restore. Ogni volta che si chiama il metodo Save, viene inserito un blocco di informazioni nello stack e si riceve un GraphicsState per il blocco di informazioni. Quando si passa uno di questi oggetti al metodo Restore, il Graphics viene restituito allo stato in cui si trovava al momento della chiamata al metodo Save che ha restituito quel particolare GraphicsState. Il blocco di informazioni posizionato nello stack da tale chiamata al metodo Save viene rimosso dallo stack e tutti i blocchi di informazioni posizionati nello stack dopo tale chiamata al metodo Save vengono rimossi.

Le chiamate al metodo BeginContainer inseriscono blocchi di informazioni sullo stesso stack delle chiamate al metodo Save. Proprio come una chiamata Restore è associata a una chiamata Save, una chiamata al metodo EndContainer viene associata a una chiamata al metodo BeginContainer.

Quando si chiama il metodo Restore, tutti i blocchi di informazioni posizionati nello stack (dal metodo Save o dal metodo BeginContainer) dopo la chiamata corrispondente al metodo Save vengono rimossi dallo stack. Analogamente, quando si chiama il metodo EndContainer, tutti i blocchi di informazioni posizionati nello stack (dal metodo Save o dal metodo BeginContainer) dopo la chiamata corrispondente al metodo BeginContainer vengono rimossi dallo stack.

Si applica a