共用方式為


Graphics.Save 方法

定義

儲存此 Graphics 的目前狀態,並使用 GraphicsState識別儲存的狀態。

public:
 System::Drawing::Drawing2D::GraphicsState ^ Save();
public System.Drawing.Drawing2D.GraphicsState Save ();
member this.Save : unit -> System.Drawing.Drawing2D.GraphicsState
Public Function Save () As GraphicsState

傳回

這個方法會傳回 GraphicsState,表示這個 Graphics的儲存狀態。

範例

下列程式代碼範例是專為搭配 Windows Forms 使用而設計,而且需要 PaintEventArgse,這是 Paint 事件處理程式的參數。 程式代碼會執行下列動作:

  • 將 Windows Form 的世界轉換轉譯為向量 (100, 0)。

  • 儲存表單的圖形狀態。

  • 將表單的世界轉換重設為身分識別(2x2 識別矩陣加上零向量轉譯),並以純紅色筆刷填滿矩形。

  • 還原翻譯的圖形狀態,並以純藍色筆刷填滿矩形。

結果是左邊未轉譯的紅色填滿矩形,以及窗體右邊的已轉譯藍色填滿矩形。

public:
   void SaveRestore3( 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 SaveRestore3(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 SaveRestore3(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

備註

當您呼叫 GraphicsSave 方法時,會將保留 Graphics 狀態的資訊區塊放在堆疊上。 Save 方法會傳回識別該資訊區塊的 GraphicsState。 當您將識別 GraphicsState 傳遞至 Restore 方法時,資訊區塊會從堆疊中移除,並用來將 Graphics 還原至 Save 方法呼叫時的狀態。 請注意,指定呼叫 Save 方法所傳回的 GraphicsState 只能傳遞一次至 Restore 方法。

Save 方法的呼叫可以是巢狀的;也就是說,您可以在呼叫 Restore 方法之前呼叫 Save 方法數次。 每次呼叫 Save 方法時,都會將資訊區塊放在堆棧上,而且您會收到資訊區塊的 GraphicsState。 當您將其中一個對象傳遞至 Restore 方法時,Graphics 會傳回在傳回該特定 GraphicsStateSave 方法呼叫時的狀態。 由該 Save 方法呼叫放置於堆疊上的資訊區塊會從堆疊中移除,而且在該 Save 方法呼叫之後放置於該堆疊上的所有資訊區塊也會移除。

呼叫 BeginContainer 方法會將資訊區塊放在與呼叫 Save 方法相同的堆疊上。 就像 Restore 呼叫與 Save 呼叫配對時,EndContainer 方法呼叫會與 BeginContainer 方法呼叫配對。

當您呼叫 Restore 方法時,系統會從堆疊中移除對應呼叫 Save 方法之後放置於堆疊上的所有資訊區塊(由 Save 方法或 BeginContainer 方法。 同樣地,當您呼叫 EndContainer 方法時,在對 BeginContainer 方法的對應呼叫從堆疊中移除之後,放置在堆棧上的所有資訊區塊(由 Save 方法或 BeginContainer 方法)。

適用於