次の方法で共有


Graphics.EndContainer メソッド

現在のグラフィックス コンテナを閉じ、この Graphics オブジェクトの状態を BeginContainer メソッドを呼び出すことによって保存される状態に復元します。

Public Sub EndContainer( _
   ByVal container As GraphicsContainer _)
[C#]
public void EndContainer(GraphicsContainercontainer);
[C++]
public: void EndContainer(GraphicsContainer* container);
[JScript]
public function EndContainer(
   container : GraphicsContainer);

パラメータ

  • container
    このメソッドで復元されるコンテナを表す GraphicsContainer オブジェクト。

戻り値

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

解説

入れ子のグラフィックス コンテナを作成するには、このメソッドと共に BeginContainer メソッドを使用します。グラフィックス コンテナは、変換、クリッピング領域、レンダリング プロパティなど、グラフィックスの状態を保持します。

Graphics オブジェクトの BeginContainer メソッドを呼び出すと、 Graphics オブジェクトの状態を保持している情報ブロックがスタックに格納されます。 BeginContainer メソッドは、その情報ブロックを識別する GraphicsContainer オブジェクトを返します。識別対象のオブジェクトを EndContainer メソッドに渡すと、情報ブロックはスタックから削除され、 Graphics オブジェクトを BeginContainer メソッド呼び出し時の状態に復元するために使用されます。

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

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

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

使用例

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

  • 新しいグラフィックス コンテナを開き、古いコンテナを保存します。
  • コンテナ内のワールド座標を平行移動します。
  • 新しいコンテナの (平行移動した座標の) 赤い四角形を塗りつぶします。
  • 新しいコンテナを閉じ、保存されているコンテナを復元します。
  • 保存されているコンテナの (平行移動していない座標の) 緑の四角形を塗りつぶします。

[Visual Basic, C#] 緑の四角形が同じサイズの赤い四角形の上に重ねられます。

 
Public Sub EndContainerState(e As PaintEventArgs)
' Begin graphics container.
Dim containerState As GraphicsContainer = _
e.Graphics.BeginContainer()
' Translate world transformation.
e.Graphics.TranslateTransform(100F, 100F)
' Fill translated rectangle in container with red.
e.Graphics.FillRectangle(New SolidBrush(Color.Red), 0, 0, _
200, 200)
' End graphics container.
e.Graphics.EndContainer(containerState)
' Fill untransformed rectangle with green.
e.Graphics.FillRectangle(New SolidBrush(Color.Green), 0, 0, _
200, 200)
End Sub
        
[C#] 
public void EndContainerState(PaintEventArgs e)
{
// Begin graphics container.
GraphicsContainer containerState = e.Graphics.BeginContainer();
// Translate world transformation.
e.Graphics.TranslateTransform(100.0F, 100.0F);
// Fill translated rectangle in container with red.
e.Graphics.FillRectangle(new SolidBrush(Color.Red), 0, 0, 200, 200);
// End graphics container.
e.Graphics.EndContainer(containerState);
// Fill untransformed rectangle with green.
e.Graphics.FillRectangle(new SolidBrush(Color.Green), 0, 0, 200, 200);
}
        

[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 名前空間