次の方法で共有


Graphics.Restore メソッド

この Graphics オブジェクトの状態を GraphicsState オブジェクトによって表される状態に復元します。

Public Sub Restore( _
   ByVal gstate As GraphicsState _)
[C#]
public void Restore(GraphicsStategstate);
[C++]
public: void Restore(GraphicsState* gstate);
[JScript]
public function Restore(
   gstate : GraphicsState);

パラメータ

  • gstate
    この Graphics オブジェクトを復元したときの状態を表す GraphicsState オブジェクト。

戻り値

このメソッドは値を返しません。

解説

Graphics オブジェクトの Save メソッドを呼び出すと、 Graphics オブジェクトの状態を保存している情報ブロックがスタックに格納されます。Save メソッドは、その情報ブロックを識別する GraphicsState オブジェクトを返します。識別対象の GraphicsState オブジェクトを Graphics.Restore メソッドに渡すと、その情報ブロックはスタックから削除され、 Graphics オブジェクトを Save メソッド呼び出し時の状態に復元するために使用されます。Save メソッドを呼び出して返された GraphicsState オブジェクトを Restore メソッドに渡すことができるのは、1 回だけです。

Save メソッドの呼び出しは入れ子にできます。つまり Restore メソッドを呼び出す前に Save メソッドを複数回呼び出すことができます。Save メソッドを呼び出すたびに情報ブロックがスタックに格納され、その情報ブロックの GraphicsState オブジェクトを受け取ります。これらのオブジェクトの 1 つを Restore メソッドに渡すと、 Graphics オブジェクトは、その GraphicsState オブジェクトを返した Save メソッドの呼び出し時の状態に戻ります。その Save メソッドの呼び出しによってスタックに置かれた情報ブロックはスタックから削除されます。さらに、Save メソッドの呼び出し後にそのスタックに置かれた情報ブロックもすべて削除されます。

BeginContainer メソッドを呼び出すと、情報ブロックは Save メソッドを呼び出したときと同じスタックに置かれます。 Restore 呼び出しが Save 呼び出しと対になっているのと同様に、 EndContainer メソッド呼び出しは BeginContainer メソッド呼び出しと対になっています。

Restore メソッドを呼び出すと、対応する Save メソッドの呼び出し後に (Save メソッドまたは BeginContainer メソッドによって) スタックに格納されたすべての情報ブロックが、スタックから削除されます。同様に、 EndContainer メソッドを呼び出すと、対応する BeginContainer メソッドの呼び出し後に (Save メソッドまたは BeginContainer メソッドによって) スタックに格納されたすべての情報ブロックが、スタックから削除されます。

使用例

[Visual Basic, C#] 次の例は、Windows フォームでの使用を意図してデザインされており、 Paint イベント ハンドラのパラメータである PaintEventArgs e が必要です。このコードは次のアクションを実行します。

  • ベクタ (100, 0) で Windows フォームのワールド変換を平行移動します。
  • フォームのグラフィックスの状態を保存します。
  • フォームのワールド変換を単位行列にリセットし、四角形を赤いソリッド ブラシで塗りつぶします。
  • 平行移動したグラフィックスの状態を復元し、2 つ目の四角形を青いソリッド ブラシで塗りつぶします。

[Visual Basic, C#] 赤で塗りつぶされた平行移動していない四角形と、青で塗りつぶされた平行移動済みの四角形が生成されます。

 
Public Sub SaveRestore(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
        
[C#] 
public void SaveRestore(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);
}
        

[C++, JScript] C++ および JScript のサンプルはありません。Visual Basic および C# のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

Graphics クラス | Graphics メンバ | System.Drawing 名前空間